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 事件循环的主要内容,如果未能解决你的问题,请参考以下文章
QGraphicsRectItem中如何实现信号和槽?子类化 qobject 和 qgraphicsrectitem 但出现错误