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
然後在main函式,使用qmetaenum列印出該列舉的詳細資訊:
int main(int argc, char *argv)
執行結果如下:
由輸出結果可以看到,由於我們沒有將列舉宣告為flag,所以isflag()函式返回false。
如果我們在q_enum(property)下面新增下面在兩句**:
q_declare_flags(priorities, priority)
q_flag(priorities)
再講main函式中fromtype()函式的呼叫修改如下:
qmetaenum me = qmetaenum::fromtype();
再執行程式,結果如下:
可以看到,此時isflag()函式就返回了true,並且對其他函式的呼叫並不受影響。這是因為,q_flag巨集會向qt元物件系統註冊每乙個列舉項。也就是說,使用了q_flag,就不必再使用q_enum巨集了。所以,將q_enum(property)注釋掉,**仍可以爭取執行,大家可以自行測試即可。
QMetaEnum獲取列舉元資訊
qmetaenum 類提供了乙個列舉的元資料。我們可以使用該類的靜態模板函式,fromtype來獲得關於某個列舉的qmetaenum物件,然後就可以呼叫該類的成員函式來獲得該列舉的相關資訊。該列舉必須使用q enum巨集進行宣告。我們可以使用name 函式來獲得列舉的名字 使用key 函式獲得列舉的...
QMetaMethod 獲取成員函式的元資訊
而要得到乙個qmetamethod類的例項,有如下方法。對於訊號,可以使用該類的靜態方法fromsignal 來獲得相對於該訊號的qmetamethod物件 對於普通成員函式和槽函式,可以使用類的qmetaobject物件來間接獲取。分別舉例如下 方法一qmetamethod destroyedsi...
QMetaMethod 獲取成員函式的元資訊
導言 最近在深入理解乙個專案的demo時,有乙個難點困惑了整整乙個上午,就是關於qmetamethod類的使用。檢視了官方的手冊,懵懵懂懂。蒐羅了網上的相關介紹,總算是有些明白了。接著,我就來分享下我的總結吧!介紹 qmetamethod類是用來獲取成員方法的元資訊的乙個類。通過該類,我們可以獲取到...