2008-09-09 52 views
1

有没有人知道事件处理程序如何管理发布的事件?Qt中带多线程的事件处理程序

在我的应用程序我有两个线程(guiThreadcomputThread)。抛出异常后,我将拨打postEvent(..)到现有的对话框。 Qt-Event-Handler一直保持这个状态直到对话框关闭。


对不起,我的问题有点混浊。如果我有时间的话,我会更精确地写下来。我找到了一个工作。但对我而言,问题仍然很有趣。

回答

2

作为Qt文档中mentionned约QCoreApplication::postEvent

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

...这解释了为什么Qt事件处理程序保持事件,直到对话框关闭。

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

1

我猜你所创建的对话框是模态的,这意味着它正在运行它自己的事件循环。在所有模态事件循环退出之前,不会处理发布到常规guiThread的事件。或者,如果您需要对话框既可以是模态的,也可以了解事件,则可以将事件直接发送到对话框。你需要弄清楚如何以共享的方式处理指针,但如果没有什么复杂的事情发生,你可以使用QApplication :: activeWindow()函数。

0

正如其他人已经写道,我相信这种行为是由对话开始自己的事件循环的事实造成的。

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