在pyqt開發圖形界面應用時,從qapplication派生的子類重寫notify方法後(具體請參考《pyqt學習随筆:通過自定義類重寫qapplication的notify方法捕獲應用的所有消息》),在事件處理跟蹤時,發現所有消息都是先發給一個qwindow對象,但在應用中并沒有定義這樣的對象。例如應用中重寫notify方法如下:
在界面上點選一個按鈕時,截獲如下輸出:
可以看到notify發送的消息包括兩條,第一條是給qwindow 對象發送,第二條是給qpushbutton 發送。其他消息也是一樣,但qwindow 對象在應用中并沒有定義。
經查閱相關資料,該qwindow 對象是pyqt程式建立的一個隐式的視窗,所有發給gui的消息先發給該隐式視窗,再進行分發。
具體大家可以參考《qt 消息處理機制深入分析 (qt消息機制與window程式消息的對比)》相關的說明。