对动态元对象的其他支持

PyQt5为任何QObject的Python子类创建一个QMetaObject实例,而不需要Qt的 Q_OBJECT宏的等价物。大多数QMetaObject通过定义信号,插槽和属性自动填充,如前几节所述。在本节中,我们将介绍如何填充QMetaObject的其余部分。

Q_ENUMS() and Q_FLAGS()

New in version 5.2.

Q_ENUMS()Q_FLAGS()函数分别声明发布在QMetaObject中的枚举类型和标志类型。PyQt5中的典型用途是声明QML可以使用的符号常量,以及可以在Qt Designer中设置的属性类型。

每个函数都需要许多实现枚举类型或标志类型的Python类型对象。For example:

from PyQt5.QtCore import Q_ENUMS, Q_FLAGS, QObject


class Instruction(QObject):

    class Direction:
        Up, Down, Left, Right = range(4)

    Q_ENUMS(Direction)

    class Status:
        Null = 0x00
        Urgent = 0x01
        Acknowledged = 0x02
        Completed = 0x04

    Q_FLAGS(Status)

Q_CLASSINFO()

Q_CLASSINFO()函数的用法与Qt的同名宏相同,也就是说,它是从类的定义中调用的,以便指定一个名称/值对,放置在类的 QMetaObject

例如,QML使用它来定义类的默认属性:

from PyQt5.QtCore import Q_CLASSINFO, QObject


class BirthdayParty(QObject):

    Q_CLASSINFO('DefaultProperty', 'guests')