【问题标题】:Event handler in Qt with multithreadQt中的多线程事件处理程序
【发布时间】:2010-09-08 08:12:25
【问题描述】:

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

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


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

【问题讨论】:

    标签: c++ qt events


    【解决方案1】:

    正如 Qt 文档中提到的关于 QCoreApplication::postEvent 的那样:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-14
          • 1970-01-01
          • 2011-06-02
          相关资源
          最近更新 更多