对动态元对象的其他支持
PyQt5 为QObject的任何Python子类创建一个QMetaObject实例,而不需要相当于Qt的宏。大多数QMetaObject都是通过定义信号,插槽和属性自动填充的,如前面部分所述。在本节中,我们将介绍填充QMetaObject的其余部分的方式 。Q_OBJECT
Q_ENUM()
和Q_FLAG()
版本5.11中的新功能。
的Q_ENUM()
和Q_FLAG()
功能声明发表在枚举类型和标志类型分别 QMetaObject。PyQt5中的典型用法是声明可以由QML使用的符号常量,以及可以在Qt Designer中设置的属性类型。
每个函数都使用Python类型对象或Enum
实现枚举或标志类型的对象。例如:
from enum import Enum from PyQt5.QtCore import Q_ENUM, Q_FLAG, QObject class Instruction(QObject): class Direction(Enum): Up, Down, Left, Right = range(4) Q_ENUM(Direction) class Status: Null = 0x00 Urgent = 0x01 Acknowledged = 0x02 Completed = 0x04 Q_FLAG(Status)
5.2版中的新功能。
还提供了(现已弃用)Q_ENUMS()
和 Q_FLAGS()
功能。它们与上述不同之处在于它们可以在一次调用中定义多种类型。
Q_CLASSINFO()
该Q_CLASSINFO()
函数的使用方式与Qt的同名宏相同,即从类的定义中调用它,以指定放置在类的QMetaObject中的名称/值对 。
例如,QML使用它来定义类的默认属性:
from PyQt5.QtCore import Q_CLASSINFO, QObject class BirthdayParty(QObject): Q_CLASSINFO('DefaultProperty', 'guests')