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
相关推荐
伐尘10 小时前
【Qt】编译 Qt 5.15.x For Windows 基础教程 Visual Studio 2019 MSVC142 x64
windows·qt·visual studio
吃面不喝汤6610 小时前
破解 Qt QProcess 在 Release 模式下的“卡死”之谜
开发语言·qt
charlie11451419117 小时前
逐步理解Qt信号与槽机制
数据库·qt
yaso_zhang1 天前
当生产了~/qt-arm/bin/qmake,可以单独编译其他-源码的某个模块,如下,编译/qtmultimedia
qt
code bean1 天前
【Qt/C++】深入理解 Lambda 表达式与 `mutable` 关键字的使用
开发语言·c++·qt
爱看书的小沐1 天前
【小沐学GIS】基于C++绘制二维瓦片地图2D Map(QT、OpenGL、GIS)
c++·qt·gis·opengl·glfw·glut·二维地图
炬火初现2 天前
Qt 的原理及使用(1)——qt的背景及安装
开发语言·qt
weixin_1102 天前
Qt 无边框窗口,支持贴边分屏
c++·qt
gaoenyang7605252 天前
QT Creator配置Kit
开发语言·qt
3D打印-HUSTAIBO2 天前
QT中connect高级链接——指针、lambda、宏
qt