首页 > 解决方案 > QObject 子类未检测到 QGuiApplication 事件循环

问题描述

当我尝试在从 QObject 派生的类中启动 QTimer 时,我收到警告

QObject::startTimer:定时器只能用于以 QThread 启动的线程

并且计时器不运行。根据此处的回答,我的自定义类似乎没有检测到由 QGuiApplication 创建的 QEventLoop。

我的 main.cpp

...
classA objA;
...
QGuiApplication app(argc, argv);
...

我的课A.h

class classA : public QObject
{
   Q_OBJECT
   private: 
      QTimer m_oTimer;
...

我的classA.cpp

classA::classA()
{
   ...
   m_oTimer.start(100);
   ...
}

如何在不创建新 QEventLoop 的情况下解决此问题?

标签: c++qtqtimerqapplicationqeventloop

解决方案


我可以通过更改我的 classA 和 QGuiApplication 的声明顺序来解决这个问题。看来任何QObject子类要检测QGuiApplication Eventloop,都必须在QGuiApplication之后声明。

我的 main.cpp:

...
QGuiApplication app(argc, argv);
...
classA objA;
...

推荐阅读