QEvent类是PyQt5.QtCore中定义的事件处理的基类,事件对象包含了事件对应的参数。
《Python & PyQt学习随笔:PyQt主程序的基本框架》介绍了PyQt程序通过sys.exit(app.exec_()) 进入程序主循环,开始处理事件,它从事件队列中获取本地窗口系统事件,将它们转化为 QEvents,然后将转换后的事件发送给 QObjects对象。
QObjects 对象通过调用 QObject.event() 函数接收事件,可以通过在子类中重写该函数来定义自己的事件处理代码,并可以添加用户自定义的事件类型,QWidget.event() 就是这样一个典型例子。
缺省情况下,事件被分发给类似 QObject.timerEvent() 和 QWidget.mouseMoveEvent() 这样的事件处理函数。QObject.installEventFilter() 允许一个对象拦截发往另一个对象的事件。
基本的 QEvent 只包含了一个事件类型参数(QEvent.Type类型)和一个"accept"标志:
1、事件类型QEvent.Type为一个枚举类,PyQt5.11中已经定义的取值请见《PyQt学习随笔:Qt事件QEvent.type类型常量及其含义资料速查》,用户自定义事件的取值范围请见《PyQt学习随笔:自定义Qt事件可以使用的事件类型的常量值范围》;
2、"accept"标志表示事件接收对象是否需要该事件,需要的事件就会被接收对象处理,不需要的就会传递给对象的父组件对象。"accept"标志可以通过accept()设置,通过ignore()被清除,它的值缺省情况下是被设置了的,但应用中不能依赖这种默认设置,因为从QEvent 派生的子类可能会选择在其构造函数中清除它。
QEvent 的子类包含了特定事件的额外参数。
QEvent提供的方法包括:
1、构造方法:QEvent( type),参数type为QEvent.Type的一个值;
2、accept()方法,设置"accept"标志为True,等同于setAccepted(True);
3、ignore()方法,清除"accept"标志,等同于setAccepted(False);
4、isAccepted()方法,该方法返回"accept"标志的标记值,为True就是标记置位了;
5、setAccepted(bool accepted)方法,用于设置或清除"accept"标志;
6、spontaneous() 方法,如果事件来源于应用外(即系统事件)则返回True,否则返回False.
7、type() 方法,返回事件对象的事件类型,其中QEvent.Type为一个枚举类的一个值;
8、registerEventType(hint = -1)方法,用于注册和返回一个用户自定义事件类型,它是线程安全的函数。其中:
1>参数hint为注册事件者期望的事件类型值,对应值如果没有被定义成事件,则就会作为事件类型的Type值,否则将使用QEvent.User和 QEvent.MaxUser 之间(请参考《PyQt学习随笔:自定义Qt事件可以使用的事件类型的常量值范围》)还没有被注册事件的一个值. 如果 hint参数被指定且不介于QEvent.User和 QEvent.MaxUser 之间将被忽略。
2>如果程序已经关闭或者QEvent.User和 QEvent.MaxUser之间没有可用值则返回-1,否则返回返回事件对象的事件类型
与QEvent 相关的方法包括:QObject.event()、QObject.installEventFilter()、 QCoreApplication.sendEvent()、 QCoreApplication.postEvent()和 QCoreApplication.processEvents()。
![](https://i-blog.csdnimg.cn/blog_migrate/d7c2003123ac5a70a05e7e0a0122c6f3.png)
博客地址:https://blog.csdn.net/LaoYuanPython
老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036