對動態元物件的其他支援
阿新 • • 發佈:2018-12-06
對動態元物件的其他支援
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')