1. 程式人生 > >對動態元物件的其他支援

對動態元物件的其他支援

   對動態元物件的其他支援

 

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')