天天看點

PyQt學習遇到的問題:重寫notify發送的消息為什麼首先給了一個QWindow對象?

在pyqt開發圖形界面應用時,從qapplication派生的子類重寫notify方法後(具體請參考《​​pyqt學習随筆:通過自定義類重寫qapplication的notify方法捕獲應用的所有消息​​》),在事件處理跟蹤時,發現所有消息都是先發給一個qwindow對象,但在應用中并沒有定義這樣的對象。例如應用中重寫notify方法如下:

在界面上點選一個按鈕時,截獲如下輸出:

可以看到notify發送的消息包括兩條,第一條是給qwindow 對象發送,第二條是給qpushbutton 發送。其他消息也是一樣,但qwindow 對象在應用中并沒有定義。

經查閱相關資料,該qwindow 對象是pyqt程式建立的一個隐式的視窗,所有發給gui的消息先發給該隐式視窗,再進行分發。

具體大家可以參考《​​qt 消息處理機制深入分析 (qt消息機制與window程式消息的對比)​​》相關的說明。

​​​​​​