PyQt学习随笔:Qt事件类QEvent详解

时间:2024-12-09 18:37:14

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()。


PyQt学习随笔:Qt事件类QEvent详解

博客地址:https://blog.****.net/LaoYuanPython

老猿Python博客文章目录:https://blog.****.net/LaoYuanPython/article/details/98245036