2008-09-09 51 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作爲發佈事件的替代方案。