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

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

  1. 关于在pro中区分linux系统,在Qt4套件是不认识 linux 标记的,需要用 unix:!macx 表示。所以如果有兼容Qt4的需求,建议用 unix:!macx 表示。
//如果是linux上的Qt4套件则下面只会打印 unix linux
//如果是linux上的Qt5/Qt6套件则下面会打印 linux unix linux
linux {message(linux)}
unix {message(unix)}
unix:!macx {message(linux)}
  1. 对于一些跨平台的项目,尤其是需要引入第三方库,需要根据不同的系统不同的位数引入对应文件夹中的库文件,这就需要项目中去识别处理。
#区分不同的系统
path_sys = win
win32 {
path_sys = win
} linux {
path_sys = linux
} #Qt4套件不认识linux标记
unix:!macx {
path_sys = linux
} macx {
path_sys = mac
} android {
path_sys = android
} #区分不同的位数 x86_64/amd64/arm64/arm64-v8a
path_bit = 32
contains(QT_ARCH, x.*64) {
path_bit = 64
} else:contains(QT_ARCH, a.*64) {
path_bit = 64
} else:contains(QT_ARCH, a.*64.*) {
path_bit = 64
} #对应系统和位数的库目录
path_lib = lib$$path_sys$$path_bit
//下面会打印 libwin32/libwin64/liblinux32/liblinux64/libmac32/libmac64/libandroid32/libandroid64
message($$path_lib) //使用方式
INCLUDEPATH += $$PWD/include
LIBS += -L$$PWD/$$path_lib/ -lxxx
  1. 当检测到某些qt构建环境不满足当前项目要求,避免项目编译失败,可以禁用项目。
#禁用项目后整个项目的代码文件是灰色的不可用,编译会跳过。
lessThan(QT_MAJOR_VERSION, 6) {
error("最低要求Qt6才能用")
}
  1. 在使用QButtonGroup按钮组添加按钮的时候,如果需要使用buttonClicked(int)信号,则添加按钮的时候必须手动指定按钮编号,否则默认编号都是-1,这样在触发buttonClicked(int)的时候值是负数,导致和预期不一致,原本以为默认按照添加按钮的顺序自动递增设置索引,其实不是的,不会这样处理。务必记得指定按钮编号。
QButtonGroup *btnGroup = new QButtonGroup(this);
connect(btnGroup, SIGNAL(buttonClicked(int)), ui->stackedWidget, SLOT(setCurrentIndex(int)));
//第二个参数指定按钮编号
btnGroup->addButton(ui->btn1, 0);
btnGroup->addButton(ui->btn2, 1);
  1. 关于QCustomplot绘图性能的改善。
  • 尽量避免笔宽度大于1的线,默认是1,如果绘制的数据量很大,强烈不建议设置线条宽度大于1,性能会大大降低。
  • 避免复杂的填充,例如在具有数千个点的图形之间进行通道填充。
  • 在图表拖动期间,可以设置 setNoAntialiasingOnDrag(true),可以提高响应速度。
  • 避免使用任何类型的alpha(透明)颜色,尤其是在填充中。
  • 尽量不要开启抗锯齿,setNotAntialiasedElements(true)。
  • 避免重复设置完整的数据集,例如使用setData。如果大多数数据点保持不变,例如在运行的测量中,请改用addData。
  • 推荐通过QCPGraph::data()访问和操作现有数据,效率更高。
  • 开启opengl加速,第一步,开启标记,在pro中加上一行 DEFINES += QCUSTOMPLOT_USE_OPENGL 。第二步,链接opengl库,LIBS += -lopengl32 -lglu32 。有些Qt版本还可能需要主动引入 QT += widgets。经过实测发现,高频率的绘制比如60fps在开启opengl有性能提升,主要是降低了CPU占用。低频率的绘制还增加了CPU占用。所以建议根据实际场景来处理。这个和数据量好像无关,和绘制数据速度有关。
  • 画布关闭抗锯齿属性,graph->setAntialiased(false) graph->setAntialiasedFill(false) graph->setAntialiasedScatters(false) 。默认是true。
  • 画布开启自适应采样,graph->setAdaptiveSampling(true)。默认是true,所以不用主动设置。

Qt/C++开发经验小技巧291-295的更多相关文章

  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开发之Hello Qt及学习小技巧

    创建第一个Qt程序的简单流程 如果安装了andriod或ios的版本也会显示出来,这里只显示了桌面端的 一个项目文件代码结构如下: 如下图可直接编辑label里的文字内容: 运行结果:(快捷键ctrl ...

随机推荐

  1. px 、em、rem 的选取依据

    1. px 像素(Pixel).绝对单位.像素px是相对于显示器屏幕分辨率而言的,是一个虚拟长度单位,是计算机系统的数字化图像长度单位,如果 px要换算成物理长度,需要 指定精度 DPI. 2. em ...

  2. Android复习(三)清单文件中的元素——>uses-configuration、uses-library、uses-permission、uses-permission-sdk-23

    <uses-configuration> 语法: <uses-configuration android:reqFiveWayNav=["true" | &quo ...

  3. 从零开始学逆向CTF比赛,免费参加,欢迎来玩!

    大家好,我是轩辕. 告诉大家一个好消息:我准备了一次逆向CTF比赛,面向所有人开放,无需购买课程,优秀的小伙伴还有奖励,参赛方式在文末会介绍,欢迎大家一起来玩. 举办这次CTF比赛,是为了检验大家从零 ...

  4. Dbeaver24.2.2安装和使用教程(免费的数据库管理工具)

    前言 DBeaver是免费和开源(GPL)为开发人员和数据库管理员通用数据库工具. DBeaver 通过 JDBC 连接到数据库,可以支持几乎所有的数据库产品,包括:MySQL.PostgreSQL. ...

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

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

  6. 如何手写实现 JSON Parser

    JSON.parse 是我们在前端开发中经常会用到API,如果我们要自己实现一个JSON.parse,我们应该怎么实现呢?今天我们就试着手写一个JSON Parser,了解下其内部实现原理. JSON ...

  7. 国产数据库oceanBbase,达梦,金仓与mysql数据库的性能对比 四、python读mysql写入达梦数据库

    一.说明 安装达梦的驱动 pip install dmPython==2.5.5 参数接收那里,其他数据库都是用%,达梦要用? 二.源码 #coding=utf-8 import pymysql im ...

  8. rust 终端输出 debug 信息

    配置方法 将 env_logger log 添加到 Cargo.toml : 打开 Cargo.toml 文件并在 [dependencies] 部分下添加 env_logger log . [pac ...

  9. luasql使用问题记录:module 'luasql.mysql' not found

    安装版本 # lua -v Lua 5.3.4 Copyright (C) 1994-2017 Lua.org, PUC-Rio # apisix version /usr/local/openres ...

  10. python通过实例方法名字的字符串调用方法

    目录 方式1 - 反射 hasattr 方法 判断当前实例中是否有着字符串能映射到的属性或者方法, 一般会在 getattr 之前作为判断防止报错 getattr 方法 获取到当前实例中传入字符串映射 ...