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

时间:2008-09-09 20:02:48

标签: c++ qt events

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

在我的应用中,我有两个线程( guiThread computationThread )。抛出异常后,我将postEvent(..)调用到现有对话框。 Qt-Event-Handler将这一个保留回来,直到对话框关闭。


抱歉,我的问题有点多云。如果我还有时间,我会更准确地写出来。我找到了一个解决方法。但对我来说问题仍然很有趣。

3 个答案:

答案 0 :(得分:2)

正如Qt文档中提到的QCoreApplication::postEvent

  

当控制返回主事件循环时,将使用notify()函数发送存储在队列中的所有事件。

...这解释了为什么Qt事件处理程序在对话框关闭之前保存事件。

如果我理解你想做什么,我会尝试使用sendEvent

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

如果您使用Qt4,则可以尝试使用queued signal/slot connections作为发布活动的替代方法。