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