1

我有一个派生自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()没有执行,我没有Qt 事件循环。这显然会导致信号/插槽无法正常工作有没有机会将 Qt 和我自己的消息循环结合起来?或者我是否需要一个频繁触发的计时器来完成我在无限循环中完成的工作?

4

2 回答 2

1

“Qt-wise”的正确方法是使用计时器并让 Qt 管理事件循环。

如果您需要依赖外部事物,您可以使用诸如QAbstractSocket在数据通过外部套接字进入时发送事件之类的东西,例如。

于 2012-10-24T17:05:25.773 回答
1

这并不是正确实现事件循环的真正答案,我相当确定有一种方法,但更多的是一种解决方法:

正常启动线程, exec() 和所有,并将启动信号连接到一个插槽(确保它在正确的线程中被调用),然后将循环放在那里,并在该循环中调用 Qt 的 processEvents()。这可以确保 Qt 事件循环得到正确设置。

于 2012-10-24T22:43:23.623 回答