1

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

在我的应用程序中,我有两个线程(guiThreadcomputeThread)。引发异常后,我调用postEvent(..)现有对话框。Qt-Event-Handler 保留这个直到对话框关闭。


抱歉,我的问题有点模糊。如果我有时间,我会更准确地写它。我找到了解决办法。但对我来说,这个问题仍然很有趣。

4

3 回答 3

2

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

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

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

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

于 2008-09-10T12:20:02.273 回答
1

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

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

于 2008-09-15T20:31:59.960 回答
0

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

如果您使用 Qt4,您可以尝试使用排队的信号/插槽连接作为发布事件的替代方法。

于 2008-09-30T12:39:08.780 回答