QMetaEnum獲取列舉元資訊

2022-01-12 17:52:28 字數 923 閱讀 2453

qmetaenum 類提供了乙個列舉的元資料。我們可以使用該類的靜態模板函式,fromtype來獲得關於某個列舉的qmetaenum物件,然後就可以呼叫該類的成員函式來獲得該列舉的相關資訊。該列舉必須使用q_enum巨集進行宣告。

我們可以使用name()函式來獲得列舉的名字;使用key()函式獲得列舉的鍵,即每個列舉項的名字;使用keycount()函式得到鍵的個數。

isflag()函式可以用來判斷該列舉是否可以作為flag使用,即每乙個列舉項是否可以使用or操作符進行運算。

keytovalue(),valuetokey(),keystovalue()和valuetokeys()函式,可以用來在列舉項的整數表示和字串表示之間進行轉換。

scope()函式可以返回該列舉作用域的類名,即給列舉所在的類。

下面,我們通過乙個例子,簡單的使用一下該類的每乙個成員函式。**如下:

我們先宣告乙個qobject的子類,在該類中定義乙個列舉型別:

#ifndef myclass_h

#define myclass_h

#include

class myclass : public qobject

enum priority ;

q_enum(priority)

};#endif // myclass_h

由輸出結果可以看到,由於我們沒有將列舉宣告為flag,所以isflag()函式返回false。

如果我們在q_enum(property)下面新增下面在兩句**:

q_declare_flags(priorities, priority)

q_flag(priorities)

再講main函式中fromtype()函式的呼叫修改如下:

qmetaenum me = qmetaenum::fromtype();

再執行程式,結果如下:

QMetaEnum獲取列舉元資訊

qmetaenum 類提供了乙個列舉的元資料。我們可以使用該類的靜態模板函式,fromtype來獲得關於某個列舉的qmetaenum物件,然後就可以呼叫該類的成員函式來獲得該列舉的相關資訊。該列舉必須使用q enum巨集進行宣告。我們可以使用name 函式來獲得列舉的名字 使用key 函式獲得列舉的...

QMetaMethod 獲取成員函式的元資訊

而要得到乙個qmetamethod類的例項,有如下方法。對於訊號,可以使用該類的靜態方法fromsignal 來獲得相對於該訊號的qmetamethod物件 對於普通成員函式和槽函式,可以使用類的qmetaobject物件來間接獲取。分別舉例如下 方法一qmetamethod destroyedsi...

QMetaMethod 獲取成員函式的元資訊

導言 最近在深入理解乙個專案的demo時,有乙個難點困惑了整整乙個上午,就是關於qmetamethod類的使用。檢視了官方的手冊,懵懵懂懂。蒐羅了網上的相關介紹,總算是有些明白了。接著,我就來分享下我的總結吧!介紹 qmetamethod類是用來獲取成員方法的元資訊的乙個類。通過該類,我們可以獲取到...