
Qt/C++经验和类库
文章平均质量分 76
分享一些平时Qt实战过程中的小技巧,以及这十几年经验中常用的封装的一些方法和类库。公众号:Qt实战/Qt入门和进阶
feiyangqingyun
欢迎关注公众号:Qt实战/Qt入门和进阶(各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发)
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
RK3568/3576/3588编译qopenglwidget项目提示failed to create dri3 screen
在RK嵌入式板子开发OpenGL项目时,遇到"libGL error: glx: failed to create dri3 screen"错误导致CPU占用飙升至500%,怀疑是使用了软件渲染而非硬件加速。针对不同板型(如3588和3576)采取不同解决方案:3588板子只需在运行时移除特定路径,而3576板子则需要在main函数前添加qputenv("QT_XCB_GL_INTEGRATION", "xcb_egl")强制使用EGL方式。该方案原创 2025-07-26 17:54:04 · 251 阅读 · 0 评论 -
Qt/C++开发经验小技巧316-320
本文总结了Qt/C++开发中的几个常见问题及解决方案:1) QPointF转经纬度时需指定精度防止偏差;2) 头文件引入顺序可能导致编译错误,建议Qt头文件放最后;3) QComboBox样式设置问题导致maxVisibleItems失效的解决方法;4) 字符串转整型的注意事项及正确转换方式;5) QByteArray取值时的临时变量问题及处理建议。这些问题都源于实际项目经验,对Qt开发者具有重要参考价值。文章还提供了完整项目资源链接和相关图片展示。原创 2025-07-26 07:29:53 · 585 阅读 · 0 评论 -
垃圾qt,毁我青春
在软件开发的漫漫征途中,我与 Qt 的邂逅本以为是一场美妙的合作,然而,现实却给了我沉重的一击。“垃圾 qt,毁我青春”,这句看似过激的话语,实则饱含了我在 Qt 开发之路上的无数辛酸与无奈。原创 2025-06-04 14:50:07 · 887 阅读 · 1 评论 -
关于无法下载Qt离线安装包的说明
Qt官方不再提供离线安装包直接下载,导致早期版本(如5.12)获取困难。虽然在线安装仅支持5.15及以上版本,但用户仍可通过特定格式的URL手动构建下载链接获取历史版本。不同平台安装包URL遵循统一命名规则(如Windows为.exe,Linux为.run,Mac为.dmg),使用下载工具即可完成获取。这一现象甚至催生了相关商业服务。示例展示了5.12.12和5.12.0版本各平台安装包的标准下载路径格式。原创 2025-05-29 17:35:15 · 1150 阅读 · 0 评论 -
推流265视频,网页如何支持显示265的webrtc
科技发展真快,以前在网页上(一般指谷歌浏览器),要显示265的视频流,都是很鸡肋的办法,要么转码,要么用很慢的hls,体验非常不好,而今谷歌官方最新的浏览器已经支持265的webrtc了,实时性爆表,以后应该会是监控行业主流。最后找个支持265webrtc的流媒体服务器推流,比如我用的是mediamtx(个人认为全宇宙实时性第一)。目前谷歌浏览器默认还未开启265,需要手动设置启动参数,官网说未来这个参数默认开启。如何确定设置后是否真正支持265?原创 2025-04-13 19:54:25 · 1027 阅读 · 0 评论 -
Qt/C++开发经验小技巧311-315
【代码】Qt/C++开发经验小技巧311-315。原创 2025-03-27 08:48:55 · 1230 阅读 · 0 评论 -
Qt/C++开发经验小技巧306-310
在使用第三库的过程中,当你使用的库种类越多,会发现一个现象,有些库依赖编译器的,比如opencv,如果你用msvc编译出来的库,那你的程序只能用msvc的套件才能正常链接该库,你要是用mingw去链接肯定失败的,要想用mingw也能成功链接,你只能用mingw去编译opencv。新版的QtCreator默认的编译目录路径在源码下build目录,之前是在源码同级的build-xxx目录,个人还是喜欢之前的方式,所有编译生成的临时文件在源码外单独的一个目录,不需要的时候直接删除就好,源码目录永远干干净净的。原创 2024-12-27 09:20:28 · 1447 阅读 · 0 评论 -
Qt文本框输入右焦点导致占用GPU,元凶搜狗输入法
今天写个程序发现啥也没干,但是GPU占用0.3%,理论上肯定0%才对,后面发现是搜狗输入法搞的鬼,一旦界面上有qopenglwidget模块和输入框有焦点,则必复现,简直日了鬼了。没焦点也没事,没有qopenglwidget控件也没事,两者都具备,保证不断的在耗费GPU,不知道输入法在干嘛,刷新界面吗?原创 2024-11-20 14:03:45 · 294 阅读 · 4 评论 -
别再吹牛逼说什么零延迟了,不可能的事
关于流媒体推拉流延时的几点说明。原创 2024-09-24 09:50:04 · 1294 阅读 · 0 评论 -
Qt/C++开发经验小技巧301-305
原因是为了安全性考虑,沙箱运行啥的,需要设置个环境变量。在QListWidgetItem设置复选框后,有时候希望在切换复选框的时候有个信号通知,以便进行处理,到这里你会发现,QListWidget所有信号中并没有该信号,通过查阅QListWidgetItem的setCheckState函数源码得知,会发送一个dataChanged信号,该信号是QListWidget的数据模型发出来的,于是就很好办了。release套件或者其他编译器都正常。可惜的是Qt6不支持win7,而win7目前用户数还是很多的。原创 2024-09-20 09:13:45 · 1411 阅读 · 0 评论 -
Qt/C++开发经验小技巧296-300
现在现在新版的Qt都是需要在线下载,有时候下载到中途过程会遇到提示下载错误,很可能是部分插件模块对应服务器没有打包导致的,一般都是一些末尾带TP字样的模块,这些模块一般也不会用,所以如果想要安装成功,你需要到选择Qt版本和插件的地方,打开Additional Libraries节点,将那些用不上的尤其是TP结尾的都不勾选,再安装即可。原创 2024-07-02 12:39:20 · 1096 阅读 · 0 评论 -
Qt血的教训/细数Qt开发的各种坑/又爱又恨/欢迎围观留言评论
搞Qt开发十几年了,最初从Qt4.6开始,一直追新到现在的6.7版本,中间经历过无数的血的教训,简直是又爱又恨。其实Qt挺好的,但是还是要忍不住吐槽一下,本人还是希望Qt发展的越来越好,这样我的饭碗就能保住了。原创 2024-04-07 10:30:46 · 2189 阅读 · 2 评论 -
Qt程序员必看/关于Qt收费的官方答复
5.订阅模式购买的商业版本,后续没有继续购买,是否影响后续商业产品的的销售和软件开源协议的变化?2.Qt5和Qt6额外提供了哪些开源版本没有提供的模块?3.商业版本的Qt是否提供最新版本的离线安装包?4.商业授权版本具体报价?原创 2024-04-02 08:17:18 · 6445 阅读 · 4 评论 -
qt+ffmpeg开发经验技巧
ffmpeg的库有链接顺序要求,如果不按照顺序来,也许在windows上没有问题,但是到了unix系统很可能有问题,报错提示云里雾里的找不到原因。顺序参照ffmpeg自带示例中的编译链接顺序即可。正确顺序是 LIBS += -L/ -lavformat -lavfilter -lavcodec -lswresample -lswscale -lavutil -lavdevice 。不是所有的库都是必须的,比如avdevice库,如果代码中没用上也没引用,可以不需要。ffmpeg解码中,av_find_b原创 2024-03-20 14:10:56 · 1325 阅读 · 0 评论 -
Qt/C++开发经验小技巧291-295
【代码】Qt/C++开发经验小技巧291-295。原创 2023-12-19 11:44:34 · 1260 阅读 · 0 评论 -
Qt/C++开发经验小技巧286-290
很多时候项目越写越大,然后就可能遇到,明明之前很简单的一段代码,运行的好好的,就那么几行几十行,为何一旦加入到当前项目中,就不行了,百思不得其解。在QTreeWidget/QTableWidget的信号currentItemChanged中,执行对应的clear方法也会触发该信号,这就需要特别注意了,对应该信号的两个参数 current/previous 表示当前节点和上一个节点,两个参数的值都为空,所以在该信号对应槽参数处理中,必须先判断该值是否为空指针,不判断的话很可能导致程序崩溃。原创 2023-11-09 16:59:58 · 1298 阅读 · 0 评论 -
Qt/C++开发经验小技巧281-285
Qt中的布局有个默认的margin边距值和spacing间距值,在没有设置该值的情况下,会根据运行的环境自动设置该值,比如1080P分辨率和2k分辨率的电脑,该值的默认值不一样,并不是你在UI设计的时候属性栏中看到的值,这个要特别注意,你看到的7可能在目标平台运行的时候是11,如果一定要按照你想要的值来运行,可以重新设置即可,设置过哪一个就该值按照设定的来。该方式也是属于斗皇级别的UI外观控制策略,最终所有的qss样式也是要通过该样式去绘制的,意味着这里你可以重新定义和控制所有控件的外观样式,非常的强大。原创 2023-08-23 11:52:15 · 1028 阅读 · 0 评论 -
Qt安卓开发经验技巧总结V202308
改好以后,设置sdk保存目录,单击右侧的 Set Up SDK 按钮,自动下载一堆文件,最后下面有个openssl的目录文件也设置下。第二个难点就是用java写对应的类,如果是会安卓开发的人来说那不要太简单,尤其是搜索那么方便一大堆,没有搞过安卓开发的人来说就需要学习下,这个没有捷径,只是希望Qt能够尽可能最大化的封装一些可以直接使用的类,比如后期版本就提供了权限申请的类 QtAndroid::requestPermissionsSync 之类的,用起来就非常的爽,不用自己写个java类调来调去的。原创 2023-08-20 11:45:13 · 1704 阅读 · 0 评论 -
Qt4/5升级到Qt6吐血经验总结V202308
增加了很多轮子,同时原有模块拆分的也更细致,估计为了方便拓展个管理。把一些过度封装的东西移除了(比如同样的功能有多个函数),保证了只有一个函数执行该功能。把一些Qt5中兼容Qt4的方法废弃了,必须用Qt5中对应的新的函数。跟随时代脚步,增加了不少新特性以满足日益增长的客户需求。对某些模块和类型及处理进行了革命性的重写,运行效率提高不少。有参数类型的变化,比如 long * 到 qintptr * 等,更加适应后续的拓展以及同时对32 64位不同系统的兼容。原创 2023-08-14 10:39:02 · 1627 阅读 · 1 评论 -
Qt/C++开发经验小技巧276-280
无效,哪怕是指定颜色 QMdiArea{background:#ff0000;} 都不行,这就很无语了,原来要用弱属性机制才行。当样式中启用了禁用样式 *:disabled{xxx} 的时候,会发现MDI子窗体无法拉伸了,这应该是Qt内部的BUG,怎么解决呢,只需要重新设置MDI这个类别的禁用样式的边框样式即可。用QProcess执行命令或者启动可执行文件,默认写法不支持带空格的路径,比如 Program Files ,需要在这个路径前后加上双引号才行,估计可能内部会用空格分割字符串导致解析失败。原创 2023-06-30 11:38:15 · 1140 阅读 · 0 评论 -
Qt/C++开发经验小技巧271-275
前面执行一些处理,比如 QApplication::setAttribute 就必须在最前面执行,而很多时候这个设置的参数不能改写死,毕竟现场的环境千差万别,希望通过配置文件来配置,那么问题来了,读取配置文件一般需要指定路径才能正常读取到,如果是 ./ 这种,很可能未必是应用程序的当前路径,如果你是双击运行的程序,那肯定是应用程序的当前路径,不是双击运行那就是系统环境中的当前路径,意味着你开机启动或者用system、QProcess等方式在开机后调用启动的话,就未必正确了。原创 2023-06-20 08:23:09 · 1233 阅读 · 0 评论 -
Qt/C++开发经验小技巧266-270
下拉框控件QComboBox默认会根据item的字符宽度调整下拉框的宽度,比如其中某个item文本很长,则下拉框会变的很宽,甚至把整个界面撑大看起来变形的感觉,有时候我们不希望是这样,有多个方法可以去掉,方法一就是设置下拉框的拉伸策略为QSizePolicy::Ignored,然后将下拉框放到一个容器中,保证容器布局中的其他控件都是有固定尺寸或者fix填充尺寸,这样下拉框就是默认自动拉伸的而且保证不会跟着item的宽度变宽。即可,整个项目中所有下拉框都会自动应用这个策略。原创 2023-05-22 09:05:40 · 1107 阅读 · 0 评论 -
Qt/C++开发经验小技巧261-265
代码中判断当前Qt库是32位还是64位,用QSysInfo::WordSize=32/64。QTreeView控件设置左侧branch图标大小,无法通过qss设置,万能大法查看源码得知控制宽度最后取决于indentation参数,indentation的默认值根据系统环境不同而不同,比如1080P分辨率下是20,你要放大可以通过 setIndentation(30) 来设置。在对选项卡控件QTabWidget设置样式表的时候,很多人希望能做成类似浏览器或者资源管理器中上面选项卡的样子,就是选中的tab上边左原创 2023-03-30 08:44:36 · 1331 阅读 · 0 评论 -
Qt/C++开发经验小技巧256-260
在有些没有opengl环境的Qt开发中,比如一些嵌入式板子为了节省资源没有编译opengl所以不会有opengl相关的头文件,在编译项目过程中可能遇到提示 GLES3/gl3.h: No such file or directory,尽管你的项目中也没有用到opengl的任何东西,那是因为你包含了一个大模块 #include ,而这个大模块中包含了 #include “qopenglwidget.h” ,你需要做的是在引入大模块前面加一行。可以通过设置过滤机制,将代码中的部分打印类别屏蔽掉,比如只原创 2022-12-14 11:03:58 · 1672 阅读 · 1 评论 -
Qt/C++开发经验小技巧251-255
Qt中的事件过滤器相当于万能大法(终极秘密武器),尤其是对整个应用程序安装事件过滤器,则可以拿到所有的事件。比如可以拿到系统标题栏鼠标按下松开,对所有需要移动的无边框窗体统一拦截进行移动处理。个人建议不到万不得已不建议使用,有一定性能损耗,毕竟这个是从最初源头拦截事件,意味着所有的事件都会到这里过一遍。如果你在收到对应事件后还做了一定耗时的处理,很容易就卡主了UI主线程。有时候我们发现控件设置透明后背景变成黑色,你可以尝试设置透明度值1而不是完全透明0,这样看起来是透明的但是又保留了窗体的特性。原创 2022-10-09 09:31:34 · 1387 阅读 · 0 评论 -
Qt/C++开发经验小技巧246-250
关于如何快速结束线程,调用terminate暴力结束容易出问题。一般来说我们都是采用标志位来结束线程,但是如果执行过程中的函数很耗时,或者在run中msleep休息的时间过久,容易导致要很长一段时间才能正确停止,此时可以考虑一个策略就是分割线程执行体,如果是函数体耗时可以在耗时的函数体中增加停止标志位的判断,使其快速跳出;其实用set get这样处理主要还是为了拓展性,比如后期如果需要对赋值进行过滤处理,或者该变量只允许读写中的一个,如果之前是直接使用的变量外,则使用的地方都要去修改规则,反而变得很糟糕。原创 2022-09-14 18:41:02 · 2602 阅读 · 0 评论 -
Qt/C++开发经验小技巧241-245
Qt开发经验小技巧236-240。原创 2022-08-31 09:02:42 · 1421 阅读 · 0 评论 -
Qt开发经验小技巧236-240
关于在头文件中定义函数使用static关键字的血的教训。原创 2022-08-14 11:18:15 · 2209 阅读 · 0 评论 -
Qt/C++开发经验小技巧231-235
Qt开发经验小技巧231-235原创 2022-08-05 15:34:46 · 1883 阅读 · 0 评论 -
Qt/C++开发经验小技巧226-230
Qt开发经验技巧原创 2022-06-30 20:12:58 · 2559 阅读 · 2 评论 -
关于Qt/C++数据库开发的一些冷知识
Qt支持不指定数据库名打开数据库,因为有时候是要在连接数据库服务器后,执行sql语句创建数据库。数据库都还没存在怎么连接呢,测试发现sqlite、mysql、sqlserver、postgresql都支持这个特性。在删除和创建数据库的前提是该数据库没有被其他程序占用,比如其他程序已经打开了该数据库则会执行失败。这里我就折磨过很多次,为什么执行失败呢?后面发现第三方数据库工具已经打开了该数据库,把工具关掉就ok了。用QSqlQueryModel+QTableView显示数据,int类型的数据,如果超过原创 2022-06-26 17:25:14 · 2509 阅读 · 5 评论 -
Qt/C++编译数据库插件通用步骤说明
近期特意花了点时间,在之前数据库集成应用这个组件的基础上再次迭代完善,历经九九八十一难,将Qt的各种数据库插件,十几个Qt版本,全部编译一遍,同时打通了插件形式直连数据库和ODBC数据源连接方式,做过各种对比测试,不同数据库不同分页算法,不同日期时间范围判断查询等。安装对应的数据库,安装后会有include头文件和lib链接库文件,这是基本的前提,编译数据库插件必须要有这两个东西。务必注意,32位的Qt必须安装32位的数据库才能正常编译成功,位数要一致。准备好数据库插件源码,比如qt-everywhere-原创 2022-06-24 09:20:51 · 1644 阅读 · 1 评论 -
Qt/C++开发经验小技巧221-225
在读取文本文件的时候,有时候会发现读取出来的中文乱码,这个时候就需要识别文件编码格式,然后主动设置对应的编码去读取就不会乱码。在连接远程数据库进行查询数据的时候,有时候会发现很慢,尤其是表数据量越多越慢,本地的话同等数据量快很多,可以尝试开启只前进属性,query.setForwardOnly(true);这样的话只会缓存一次的数据,大大提高远程数据库的查询效率,据说可以提高几十倍百倍的速度。当然前提是对查询的数据之前向前取数据的需求,如果还要往后取数据或者在数据模型QSqlQueryModel中原创 2022-06-13 09:18:46 · 1596 阅读 · 0 评论 -
关于QCustomPlot超级图表的一些冷知识点
开源的图表控件QCustomPlot很经典,作者至少是八星斗圣级别,在曲线数据展示这块性能彪悍,总结了一些容易忽略的经验要点。可以将XY轴对调,然后形成横向的效果,无论是曲线图还是柱状图,分组图、堆积图等,都支持这个特性。不需要的提示图例可以调用 legend->removeItem 进行移除。两条曲线可以调用 setChannelFillGraph 设置合并为一个面积区域。可以关闭抗锯齿 setAntialiased 加快绘制速度。可以设置不同的线条样式(setLineStyle)、数据原创 2022-05-29 09:45:16 · 2546 阅读 · 3 评论 -
Qt/C++开发经验小技巧216-220
Qt的网络库支持udp广播搜索和组播搜索,其中组播搜索可以跨网段搜索,有时候你会发现失灵,此时你可以尝试把本地的虚拟机的网卡禁用试试,估计就好了。还有就是在本地开启了代理啥的,先关掉试试。近期在使用tcpsocket连接的时候,发现在Qt4和Qt5中正常的程序,到了Qt6中就不行了,报错提示 The proxy type is invalid for this operation ,原来是本地设置了代理导致的,可能在Qt6以前会默认跳过去不处理。//也可以通过代码设置跳过代理#include <.原创 2022-05-21 09:25:04 · 1553 阅读 · 1 评论 -
关于Qt高分屏缩放几个知识点
在windows上经常遇到高分屏缩放的问题,很头疼,貌似这东西就是windows首发的。在Qt4时代的程序遇到高分屏缩放,不作任何处理,毕竟Qt4时代(2010年以前)出来的时候几乎还没高分屏缩放这东西。从Qt5.6开始提供了高分屏缩放支持,需要在main函数前面设置 QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);从Qt5.14开始提供了高分屏缩放策略设置,需要在main函数前面设置 QApplication::setHighDpiS.原创 2022-05-19 12:46:39 · 4601 阅读 · 0 评论 -
总结几个Qt版本的冷知识
Qt4.8.7是Qt4的终结版本,是Qt4系列版本中最稳定最经典的(很多嵌入式板子还是用Qt4.8),其实该版本是和Qt5.5差不多时间发布的。参考链接 https://www.qt.io/blog/2015/05/26/qt-4-8-7-released https://blog.qt.io/blog/2015/07/01/qt-5-5-released/Qt5.6.3最最后支持xp系统的长期支持版本,Qt5.7.0是最后支持xp系统的非长期支持版本。Qt5.12.3是最后提供mysql数据库插件的.原创 2022-05-12 17:22:02 · 3353 阅读 · 1 评论 -
Qt/C++交叉编译整理的几点说明
关于交叉编译,对于初学者来说是个极难跨过去的砍(一旦跨过去了,以后遇到需要交叉编译的时候都是顺水推舟、信手拈来。),因为需要搭建交叉编译环境,好在现在厂家提供的板子基本上都是测试好的环境,尤其是提供的编译器,不用自己再去折腾,按照官方手册来基本上不会有啥的的问题。在linux系统上编译ffmpeg和qt都是非常简单的事情,初学者也会,前提只要本地的gcc g++编译器正常。任何编译器包括嵌入式编译器,为了确保环境正常,你可以先查看对应的编译器版本是否ok,g++ -v arm-linux-g++ -原创 2022-05-07 14:38:36 · 2185 阅读 · 0 评论 -
Qt/C++开发经验小技巧211-215
QMainWindow 在对停靠窗体进行排列的时候,有些不常用的设置容易遗忘,建议将 QMainWindow 的头文件函数过一遍一目了然。//设置停靠参数,不允许重叠,只允许拖动this->setDockOptions(QMainWindow::AnimatedDocks);//将底部左侧作为左侧区域,底部右侧作为右侧区域,否则底部区域会填充拉伸this->setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);this-&.原创 2022-04-29 13:37:36 · 2469 阅读 · 0 评论 -
Qt/C++开发经验小技巧206-210
有时候需要对文本进行分散对齐显示,相当于无论文字多少,尽可能占满整个空间平摊占位宽度,但是在对支持对齐方式的控件比如QLabel调用 setAlignment(Qt::AlignJustify | Qt::AlignVCenter) 设置分散对齐会发现没有任何效果,这个时候就要考虑另外的方式比如通过控制字体的间距来实现分散对齐效果。QString text = "测试分散对齐内容";//计算当前文本在当前字体下占用的宽度QFont font = ui->label->font();i.原创 2022-04-14 13:25:42 · 1638 阅读 · 0 评论