个人对python中事件过程的理解,可能有错误,日后修订,执行原理如下:
1、Qt中的事件循环是由QApplication.exec()开始的。当该语句执行后,应用程序便建立起了一个事件循环机制,该机制不断的从系统的消息队列中获取与该应用程序有关的消息,并根据事件本身携带的信息,将事件匹配给目的窗口。
2、事件到达目的窗口后,调用QWidget.event(QEvent event)函数获取该事件。注意:该函数是一个虚函数,子类可以重写该函数以实现自定义的事件响应。为什么重写该函数可以自定义事件响应呢?事件那么多,怎么判断获取的是什么事件呢?另外,如果窗口不想处理接收的事件,那要怎样拒绝呢?
对于以上的问题,我们就要好好分析QWidget.event(QEvent event)这个函数具体做了什么。
3、我们知道,QEvent类,有一个accepted属性,当该属性为True时,表示窗口愿意 接收该事件并作出响应,我们可以理解为该事件对窗口可见;否则,表示窗口不愿意接收该事件,理解为该事件对窗口不可见。而QEvent的accept()函数可以使该属性为True,ignore()函数使该属性为False。通过调用这两个函数,就可以决定窗口是接收还是抛弃该事件了。如果抛弃该事件,则表明对该事件不作响应。
4、QEvent还有一个函数,type(),该函数返回事件的具体类型,是键盘事件还是鼠标事件,还是拖拽事件,亦或关闭事件,绘制事件等等。通过判断该函数的返回类型,并将该事件强制转化成具体事件再具体判断其他状态,写出事件响应函数,即可完成自定义事件响应过程。因此event()函数是非常有必要重写且重要的函数。
5、event()函数与具体的事件响应函数,如closeEvent(QCloseEvent event)是什么关系呢?记住具体的事件响应函数是在event()函数里进行调用的,因为它是总得事件函数。如果我们没有对event()函数进行重载,默认情况下也是event()函数判断具体事件是什
