Qt-QBasicTimer can only be used with threads started with QThread原因探究

项目中遇到这样一个bug,程序关闭后,终端报warning:

QBasicTimer can only be used with threads started with QThread

查找资料后发现,报错的原因很可能是因为使用了static QObject造成的,在这篇文章中我已经提到过,我们不应该使用static的QObject,该篇文章中的引用1提到:

In general, creating QObjects before the QApplication is not supported and can lead to weird crashes on exit , depending on the platform. This means static instances of QObject are also not supported . A properly structured single or multi-threaded application should make the QApplication be the first created, and last destroyed QObject.

在项目中检查发现确实使用了一个static的QDialog,并且ui包含combobox的时候退出时会打印warning,如果没有combobox则不会。

在这个贴子中,提问者的现象和我一致,猜测的原因是QObject和QApplication的析构顺序造成的。

综上,解决方法就是不要使用static QObject,不论是否有报warning,否则可能出现各种奇怪的问题

引用:

  1. https://forum.qt.io/topic/143202/weird-connection-between-qcombobox-qbasictimer-and-static-object-initialization/2
  2. https://blog.csdn.net/mrbone11/article/details/123406432
相关推荐
小短腿的代码世界18 小时前
Qt 股票订单撮合引擎:高频交易系统的核心心脏
开发语言·数据库·qt·系统架构·交互
神仙别闹1 天前
基于QT(C++)实现学生成绩管理系统
数据库·c++·qt
小短腿的代码世界1 天前
Qt OpenGL 架构与自定义着色器:源码级解析高性能图形渲染
qt·架构·着色器
郝学胜-神的一滴1 天前
Qt 入门 01-02: 开发环境搭建指南
开发语言·c++·qt·客户端
用户805533698031 天前
现代Qt开发教程(新手篇)2.1——QPainter 绘图基础
c++·qt
小短腿的代码世界1 天前
Qt 3D 深度解析:QtQuick 与 Scene Graph 驱动的工业级 3D 渲染架构
qt·3d·架构
Hua-Jay1 天前
OpenCV联合C++/Qt 学习笔记(十七)----凸包检测、直线检测及点集拟合
c++·笔记·qt·opencv·学习·计算机视觉
学习,学习,在学习1 天前
Qt多线程的使用与注意事项
开发语言·数据库·qt
咸鱼翻身小阿橙1 天前
Qt Quick 登录界面代码学习笔记
笔记·qt·学习
宠..1 天前
VS Code 修改 C++ 标准同时修改错误检测标准
java·linux·开发语言·javascript·c++·python·qt