我有一个从 QThread: class MyClass : public QThread
派生的类。在运行方法中,我有"我自己的"消息循环:
run() {
// exec(); // while not reached
while (_runMessageLoop && ...) {
hr = CallDispatch(.....);
if (hr== 0) QThread::msleep(100);
// QCoreApplication::processEvents(); // Does not work
}
}
由于未执行exec()
,因此我有 no QT事件循环。这显然会导致信号/插槽无法正常工作。是否有机会组合QT和我自己的消息循环?,或者我需要经常发射计时器才能做我在无限循环中完成的工作?
正确的方式" qt-wise"是使用计时器,让QT管理事件循环。
如果您需要依靠外部事物,则可以使用诸如QAbstractSocket
之类的事物在数据进出时发送事件,例如
这不是正确实施事件循环的真正答案,我可以肯定有一种方法,但更多的是解决方法:
正常启动线程,exec()和all,然后将启动信号连接到插槽(确保在正确的线程中调用它),然后将循环放在此处,然后在该循环中调用QT的ProcessEvents()。这确保QT事件循环得到正确设置。