有没有人知道事件处理程序如何管理发布的事件?
在我的应用中,我有两个线程( guiThread 和 computationThread )。抛出异常后,我将postEvent(..)
调用到现有对话框。 Qt-Event-Handler将这一个保留回来,直到对话框关闭。
抱歉,我的问题有点多云。如果我还有时间,我会更准确地写出来。我找到了一个解决方法。但对我来说问题仍然很有趣。
答案 0 :(得分:2)
正如Qt文档中提到的QCoreApplication::postEvent:
当控制返回主事件循环时,将使用notify()函数发送存储在队列中的所有事件。
...这解释了为什么Qt事件处理程序在对话框关闭之前保存事件。
如果我理解你想做什么,我会尝试使用sendEvent。
答案 1 :(得分:1)
我猜你创建的对话框是模态的,这意味着它正在运行自己的事件循环。在退出所有模态事件循环之前,不会处理发布到常规guiThread的事件。
或者,如果您需要对话框既是模态的又知道事件,则可以将事件直接发布到对话框中。您需要弄清楚如何以共享方式处理指针,但如果没有复杂的事情,您可以使用QApplication :: activeWindow()函数。
答案 2 :(得分:0)
正如其他人已经写过的那样,我认为这种行为是由对话框启动自己的事件循环引起的。
如果您使用Qt4,则可以尝试使用queued signal/slot connections作为发布活动的替代方法。