1. 对MDI窗体区域设置背景颜色透明,会发现 QMdiArea{background:transparent;} 无效,哪怕是指定颜色 QMdiArea{background:#ff0000;} 或者 QMdiArea{background-color:#ff0000;} 都不行,这就很无语了,原来要用弱属性机制才行。QMdiArea

  2. 当样式中启用了禁用样式 *:disabled{xxx} 的时候,会发现MDI子窗体无法拉伸了,这应该是Qt内部的BUG,怎么解决呢,只需要重新设置MDI这个类别的禁用样式的边框样式即可。QMdiSubWindow:disabled

  3. 用QProcess执行命令或者启动可执行文件,默认写法不支持带空格的路径,比如 Program Files ,需要在这个路径前后加上双引号才行,估计可能内部会用空格分割字符串导致解析失败。普通路径加上引号也能正常执行,所以为了确保以防万一,统一加上引号即可。

QString cmd = "c:/Program Files/a.exe";
//下面这个会执行失败
QProcess::startDetached(cmd); //前后加上引号就可以正常执行
cmd = "\"" + cmd + "\"";
QProcess::startDetached(cmd);
  1. 在循环中取值,临时变量的定义尽量在循环外层定义,每次在循环里层定义会增加开销,特别是复杂类型比如QString(基础类型比如int/bool差别不大),循环次数越多,性能差别越大。
void MainWindow::on_pushButton_clicked()
{
QElapsedTimer timer;
timer.start(); QString s;
QString text = "abc";
for (int i = 0; i < 10000; ++i) {
s = text.at(0);
} qDebug() << "方式1" << timer.nsecsElapsed();
} void MainWindow::on_pushButton_2_clicked()
{
QElapsedTimer timer;
timer.start(); QString text = "abc";
for (int i = 0; i < 10000; ++i) {
QString s = text.at(0);
} qDebug() << "方式2" << timer.nsecsElapsed();
} //debug模式下方式1比方式2快6倍+
//release模式下方式1比方式2快30倍+
  1. Qt的属性机制非常强大,除了可以用来控制样式表,也可以很方便的用来传值,比如qml中的值传递,有时候我们写了一个通用类,希望这个类可以做很多事情,但是又希望其中有一些特殊变量存取值,一种办法是直接定义私有变量,提供get/set接口函数,还有一种偷懒的办法就是用属性setProperty/property,然Qt内部从元对象数据层面自己管理,这样不用在类中写对应的变量和get/set函数。但是肯定有性能损耗,性能上肯定比变量低,所以要看具体的实际需求,如果不是非常频繁的调用setProperty/property,通用性优先的话,那用属性机制会更方便。个人推荐方式三,继承通用类,在子类中增加set/get。
void MainWindow::on_pushButton_clicked()
{
QElapsedTimer timer;
timer.start(); for (int i = 0; i < 10000; ++i) {
Test *t = new Test;
//t->setId(i);
//t->setName("test");
t->getName();
} qDebug() << "方式1" << timer.nsecsElapsed();
} void MainWindow::on_pushButton_2_clicked()
{
QElapsedTimer timer;
timer.start(); for (int i = 0; i < 10000; ++i) {
Test *t = new Test;
//t->setProperty("id", i);
//t->setProperty("name", "test");
t->property("name").toString();
} qDebug() << "方式2" << timer.nsecsElapsed();
} //对比测试和具体的变量类型无关/int和QString类型产生的性能差别一样
//setProperty比setxxx方式性能差3倍+
//property比getxxx方式性能差1.3倍

国内站点:https://gitee.com/feiyangqingyun

国际站点:https://github.com/feiyangqingyun

Qt开发经验小技巧276-280的更多相关文章

  1. Qt开发经验小技巧81-90

    Qt中的QColor对颜色封装的很完美,支持各种转换,比如rgb.hsb.cmy.hsl,对应的是toRgb.toHsv.toCmyk.toHsl,还支持透明度设置,颜色值还能转成16进制格式显示. ...

  2. Qt开发经验小技巧61-70

    很多人问Qt嵌入式平台用哪个好,这里统一回答(当前时间节点2018年):imx6+335x比较稳定,性能高就用RK3288 RK3399,便宜的话就用全志H3,玩一玩可以用树莓派香橙派. 对于大段的注 ...

  3. Qt开发经验小技巧41-50

    如果使用sqlite数据库不想产生数据库文件,可以创建内存数据库. QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); ...

  4. Qt开发经验小技巧71-80

    在我们使用QList.QStringList.QByteArray等链表或者数组的过程中,如果只需要取值,而不是赋值,强烈建议使用 at() 取值而不是 [] 操作符,在官方书籍<C++ GUI ...

  5. Qt开发经验小技巧51-60

    在某些http post数据的时候,如果采用的是&字符串连接的数据发送,中文解析乱码的话,需要将中文进行URL转码. QString content = "测试中文"; Q ...

  6. Qt开发经验小技巧31-40

    代码判断MSVC编译器版本. if (_MSC_VER == 1800) MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015) MSVC++ 12.0 _ ...

  7. Qt开发经验小技巧21-30

    如果出现Z-order assignment: is not a valid widget.错误提示,用记事本打开对应的ui文件,找到为空的地方,删除即可. 善于利用QComboBox的addItem ...

  8. Qt开发经验小技巧11-20

    获取类的属性 const QMetaObject *metaobject = object->metaObject(); int count = metaobject->propertyC ...

  9. Qt开发经验小技巧1-10

    当编译发现大量错误的时候,从第一个看起,一个一个的解决,不要急着去看下一个错误,往往后面的错误都是由于前面的错误引起的,第一个解决后很可能都解决了. 定时器是个好东西,学会好使用它,有时候用QTime ...

  10. Qt开发经验小技巧合集

    一.开发经验总结 当编译发现大量错误的时候,从第一个看起,一个一个的解决,不要急着去看下一个错误,往往后面的错误都是由于前面的错误引起的,第一个解决后很可能都解决了. 定时器是个好东西,学会好使用它, ...

随机推荐

  1. 关于自定义事件父子组件传值问题 $event

    1.$event 是 vue 提供的特殊变量,用来表示原生的事件参数对象 event 1.1在原生事件中,$event是事件对象 可以点出来属性 2.在原生事件中,$event是事件对象,在自定义事件 ...

  2. .NET高级调试 - 3.8线程操作

    简介 高级调试过程中,与线程与线程栈是打交道特别多的.因此如何查看线程与线程栈就显得至关重要了 查看线程 !Threads 使用 !t/!Threads 命令获取所有托管线程 含义 ThreadCou ...

  3. 5.29 相约杭州!云原生 Meetup 第二期杭州站开启报名

    以容器技术和容器编排为基础的云原生应用,被越来越多的企业用户接受和使用,并且在生产环境中使用容器技术的比例逐年增加.KubeSphere 作为一款面向应用的开源容器混合云,经过 3 年的发展和 10 ...

  4. 云原生爱好者周刊:使用 AWS 开源的 FireCracker 来创建和管理 K8s 集群

    开源项目推荐 KubeFire 这个项目比较有创意,它使用 AWS 开源的轻量级虚拟化项目 FireCracker 来创建和管理 Kubernetes 集群,摒弃了传统的 qcow2 和 vhd 等虚 ...

  5. 云原生爱好者周刊:买个蓝牙打印机实时打印新提交的 PR 吧 | 2022-10-24

    开源项目推荐 blue 这个项目非常有意思,利用树莓派.蓝牙热敏打印机和 GitHub Actions 自动将新提交的 PR 或者 Issue 通过打印机打印出来,非常适合各个项目的维护者使用 Kub ...

  6. 【2024】所有人都能看懂的 Win 11 安装/重装教程,跟着我一遍包成功

    无论你因为系统坏掉想重装一下 Windows,或者只是想升级一下 Windows 都可以.虽然标题写的是 Win 11,不过实际上对于任何 Windows 系统都适用,不过现在 Win 11 已经相当 ...

  7. Machine Learning Week_8 K-means And PCA

    目录 1 K-means 1.1 Unsupervised Learning:Introduction 1.2 K-Means Algorithm 1.2.1 k-means algorithm 1. ...

  8. mybatis相关-转义字符串报错-Cause: org.xml.sax.SAXParseException

    mybatis相关-转义字符串报错-Cause: org.xml.sax.SAXParseException 部分报错信息 Caused by: org.springframework.beans.f ...

  9. 全中国有多少公网IP地址?

    之前为了准备CTF比赛,搞了一个云服务器,顺便申请了一个公网IP. 看着申请到的IP地址,我突然想到了一个问题:不是早就说IP地址已经耗尽了吗,为什么我随便就能申请到,是谁在负责IP地址的管理分配,咱 ...

  10. 基于Java+SpringBoot心理测评心理测试系统功能实现八

    一.前言介绍: 1.1 项目摘要 心理测评和心理测试系统在当代社会中扮演着越来越重要的角色.随着心理健康问题日益受到重视,心理测评和心理测试系统作为评估个体心理状态.诊断心理问题.制定心理治疗方案的工 ...