在pyqt开发图形界面应用时,从qapplication派生的子类重写notify方法后(具体请参考《pyqt学习随笔:通过自定义类重写qapplication的notify方法捕获应用的所有消息》),在事件处理跟踪时,发现所有消息都是先发给一个qwindow对象,但在应用中并没有定义这样的对象。例如应用中重写notify方法如下:
在界面上点击一个按钮时,截获如下输出:
可以看到notify发送的消息包括两条,第一条是给qwindow 对象发送,第二条是给qpushbutton 发送。其他消息也是一样,但qwindow 对象在应用中并没有定义。
经查阅相关资料,该qwindow 对象是pyqt程序创建的一个隐式的窗口,所有发给gui的消息先发给该隐式窗口,再进行分发。
具体大家可以参考《qt 消息处理机制深入分析 (qt消息机制与window程序消息的对比)》相关的说明。