QObject 子类未检测到 QGuiApplication 事件循环

Posted

技术标签:

【中文标题】QObject 子类未检测到 QGuiApplication 事件循环【英文标题】:QObject Child Class Not Detecting QGuiApplication Event Loop 【发布时间】:2021-12-08 18:56:48 【问题描述】:

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

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

并且计时器不运行。根据答案here,我的自定义类似乎没有检测到由 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 的情况下解决此问题?

【问题讨论】:

更改为QGuiApplication app(argc, argv); classA objA; @eyllansec 你打败了我:D 我能够解决这个问题,并考虑将它作为 QA 发布到 SO 以帮助其他人 :) 【参考方案1】:

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

我的 main.cpp:

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

【讨论】:

以上是关于QObject 子类未检测到 QGuiApplication 事件循环的主要内容,如果未能解决你的问题,请参考以下文章

在子类中未检测到 C++ 纯虚函数

QML 未能检测到在 C++ 中破坏的 QObject

QGraphicsRectItem中如何实现信号和槽?子类化 qobject 和 qgraphicsrectitem 但出现错误

将一对存储在 QObject 子类中

QT5 插槽未在子类中调用

为啥我能够为 QObject 子类创建复制构造函数并重载赋值运算符?