zoukankan      html  css  js  c++  java
  • Qt开发经验小技巧91-100

    1. 数据库处理一般建议在主线程,如果非要在其他线程,务必记得打开数据库也要在那个线程,即在那个线程使用数据库就在那个线程打开,不能打开数据库在主线程,执行sql在子线程,很可能出问题。

    2. 新版的QTcpServer类在64位版本的Qt下很可能不会进入incomingConnection函数,那是因为Qt5对应的incomingConnection函数参数变了,由之前的int改成了qintptr,改成qintptr有个好处,在32位上自动是quint32而在64位上自动是quint64,如果在Qt5中继续写的参数是int则在32位上没有问题在64位上才有问题,所以为了兼容Qt4和Qt5,必须按照不一样的参数写。

    #if (QT_VERSION > QT_VERSION_CHECK(5,0,0))
        void incomingConnection(qintptr handle);
    #else
        void incomingConnection(int handle);
    #endif
    
    1. Qt支持所有的界面控件比如QPushButton、QLineEdit自动关联 on_控件名_信号(参数) 信号槽,比如按钮的单击信号 on_pushButton_clicked(),然后直接实现槽函数即可。

    2. QWebEngineView控件由于使用了opengl,在某些电脑上可能由于opengl的驱动过低会导致花屏或者各种奇奇怪怪的问题,比如showfullscreen的情况下鼠标右键失效,需要在main函数启用软件opengl渲染。

    #if (QT_VERSION > QT_VERSION_CHECK(5,4,0))
        //下面两种方法都可以,Qt默认采用的是AA_UseDesktopOpenGL
        QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);
        //QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL);
    #endif
        QApplication a(argc, argv);
    

    另外一个方法解决 全屏+QWebEngineView控件一起会产生右键菜单无法弹出的bug,需要上移一个像素

    QRect rect = qApp->desktop()->geometry();
    rect.setY(-1);
    rect.setHeight(rect.height());
    this->setGeometry(rect);
    
    1. QStyle内置了很多方法用处很大,比如精确获取滑动条鼠标按下处的值。
    QStyle::sliderValueFromPosition(minimum(), maximum(), event->x(), width());
    
    1. 用QFile读写文件的时候,推荐用QTextStream文件流的方式来读写文件,速度快很多,基本上会有30%的提升,文件越大性能区别越大。
    //从文件加载英文属性与中文属性对照表
    QFile file(":/propertyname.txt");
    if (file.open(QFile::ReadOnly)) {
        //QTextStream方法读取速度至少快百分之30
    #if 0
        while(!file.atEnd()) {
            QString line = file.readLine();
            appendName(line);
        }
    #else
        QTextStream in(&file);
        while (!in.atEnd()) {
            QString line = in.readLine();
            appendName(line);
        }
    #endif
        file.close();
    }
    
    1. 用QFile.readAll()读取QSS文件默认是ANSI格式,不支持UTF8,如果在QtCreator中打开qss文件来编辑保存,这样很可能导致qss加载以后没有效果。
    void frmMain::initStyle()
    {
        //加载样式表
        QString qss;
        //QFile file(":/qss/psblack.css");
        //QFile file(":/qss/flatwhite.css");
        QFile file(":/qss/lightblue.css");
        if (file.open(QFile::ReadOnly)) {
    #if 1
            //用QTextStream读取样式文件不用区分文件编码 带bom也行
            QStringList list;
            QTextStream in(&file);
            //in.setCodec("utf-8");
            while (!in.atEnd()) {
                QString line;
                in >> line;
                list << line;
            }
    
            qss = list.join("
    ");
    #else
            //用readAll读取默认支持的是ANSI格式,如果不小心用creator打开编辑过了很可能打不开
            qss = QLatin1String(file.readAll());
    #endif
            QString paletteColor = qss.mid(20, 7);
            qApp->setPalette(QPalette(QColor(paletteColor)));
            qApp->setStyleSheet(qss);
            file.close();
        }
    }
    
    1. QString内置了很多转换函数,比如可以调用toDouble转为double数据,但是当你转完并打印的时候你会发现精确少了,只剩下三位了,其实原始数据还是完整的精确度的,只是打印的时候优化成了三位,如果要保证完整的精确度,可以调用 qSetRealNumberPrecision 函数设置精确度位数即可。
    QString s1, s2;
    s1 = "666.5567124";
    s2.setNum(888.5632123, 'f', 7);
    qDebug() << qSetRealNumberPrecision(10) << s1.toDouble() << s2.toDouble();
    
    1. 用QScriptValueIterator解析数据的时候,会发现总是会多一个节点内容,并且内容为空,如果需要跳过则增加一行代码。
    while (it.hasNext()) {
        it.next();    
        if (it.flags() & QScriptValue::SkipInEnumeration)      
           continue;     
        qDebug() << it.name();
    }
    
    1. setPixmap是最糟糕的贴图方式,一般只用来简单的不是很频繁的贴图,频繁的建议painter绘制,默认双缓冲,在高级点用opengl绘制,利用GPU。

    Qt开发经验开源主页(持续更新):

    1. https://gitee.com/feiyangqingyun/qtkaifajingyan
    2. https://github.com/feiyangqingyun/qtkaifajingyan
  • 相关阅读:
    简单的HelloWorld
    jsp获取绝对路径
    EasyUI validType属性
    Django meida(admin后台上传图片并可访问)
    postgresql char 与 varchar的区别
    git pull 源成分支遇到“There is no tracking information for the current branch.”错误
    Centos安装Pillow模块出错解决办法
    centos7网络配置
    表格排序插件tablesorter的初步使用介绍
    linux编译安装指定版本的python
  • 原文地址:https://www.cnblogs.com/feiyangqingyun/p/14670328.html
Copyright © 2011-2022 走看看