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
相关推荐
金色熊族2 小时前
在Qt中使用asan检测内存泄漏(一)
linux·qt·asan
前行中的小猪2 小时前
Qt 5 踩坑实录:多显示器跨屏拖拽导致窗口异常放大与 setGeometry 报错的深度解析与根治
qt·多显示器·高分辨率·多屏幕
想做小南娘,发现自己是女生喵4 小时前
QT项目实战第一周(嵌入式)
开发语言·qt
誰能久伴不乏6 小时前
【无标题】
c++·qt·机器人
金色熊族6 小时前
在Qt中使用asan检测内存泄漏(二)--检查依赖库的内存使用
linux·qt·asan
qq_401700416 小时前
Qt 组播(Multicast)实战详解
开发语言·qt
布莱克6051 天前
QtWidgets 与 QML:两大 UI 开发框架的全面对比
开发语言·c++·qt·ui·架构
MoRanzhi12031 天前
第4篇 · 使用 PyQt5 实现 2048:平滑动画与性能优化
python·性能优化·qtimer·pyqt5·qpainter·gui动画·2048游戏
qq_401700411 天前
Qt 实时大数据量存储:自己动手实现 TDMS 读写
数据库·qt
NiceBlueChai1 天前
Qt 跨线程传递多容器嵌套结构:一次 Release 实测
开发语言·qt