Qt中具有多线程的事件处理程序

时间:2020-03-05 18:50:18  来源:igfitidea点击:

有人知道事件处理程序如何管理发布的事件吗?

在我的应用程序中,我有两个线程(guiThread和CalculationThread)。引发异常后,我将postEvent(..)调用到现有对话框。 Qt-Event-Handler保持这一状态,直到对话框关闭。

抱歉,我的问题有点阴天。如果我还有时间,我会写得更准确。我找到了解决方法。但是对我来说,这个问题仍然很有趣。

解决方案

回答

正如Qt文档中关于QCoreApplication :: postEvent所述:

When control returns to the main event loop, all events that are stored in the queue will be sent using the notify() function.

...这说明了为什么Qt事件处理程序会保留事件直到对话框关闭。

如果我正确理解了我们想做什么,我将尝试使用sendEvent。

回答

我猜我们创建的对话框是模式对话框,这意味着它正在运行自己的事件循环。在退出所有模式事件循环之前,不会处理发布到常规guiThread上的事件。

或者,如果我们需要对话框既是模式对话框又要了解事件,则可以将事件直接发布到对话框中。我们将需要弄清楚如何以共享方式处理指针,但是如果没有复杂的事情发生,则可以使用QApplication :: activeWindow()函数。

回答

正如其他人已经写过的,我相信这种行为是由对话框启动其自己的事件循环引起的。

如果使用Qt4,则可以尝试使用排队的信号/插槽连接来替代发布事件。