qt5以後(具體版本可能是5.10吧,這個不確定)採用以下方法
在qt中將列舉型別註冊(qt_q_enum或qt_q_flag)後,就可以利用qt的元物件進行列舉型別與字串型別轉換了。
**示例:
#include intmain()在qss中我們可以這樣使用列舉型別:
qtabbar#customtabbarqt中判斷訊號是否與槽連線:
qpushbutton btn;qt4.8則採用以下方法:int receivers = btn.receivers(signal(clicked(bool));
一、enum 自省1 23
const
qmetaobject &mo = [classname]::staticmetaobject;
int
index = mo.indexofenumerator(
"[enumname]"
);
qmetaenum me = mo.enumerator(index);
若 enum 定義在當前類中,則可以簡寫為1
2int
index = staticmetaobject.indexofenumerator(
"[enumname]"
);
qmetaenum me = staticmetaobject.enumerator(index);
二、enum 轉換
1、 enum int1
enum
color ;color c = (color)1;
//c=whiteint i = red; //i=0
2、 enum string1
enum
color ;
1qstring s =
"white"
;
1int
idx = mo.indexofenumerator(
"color"
);
qmetaenum ienum = mo.enumerator(idx);
int val = ienum.keystovalue(s.toascii());1
color c = (color)val ;
如果是自定義類中的自定義列舉,如下操作
class [classname]:public qobject
;
};使用的時候:
const qmetaobject &mo=[classname]::staticmetaobject;
int index = mo.indexofenumerator("[enumname]");
qmetaenum metaenum = mo.enumerator(index);
const char *c=metaenum.valuetokey(*****);undefined reference to staticmetaobject這裡注意在class t內宣告中新增q_object 巨集會經常有出現以下錯誤
解決辦法:
重新執行qmake,記住每次你新增或者移除q_gadget or q_object巨集,一定要重新執行一遍qmake,問題就解決了。切記!!!
QT列舉型別與字串型別相互轉換
qt5以後 具體版本可能是5.10吧,這個不確定 採用以下方法 在qt中將列舉型別註冊 qt q enum或qt q flag 後,就可以利用qt的元物件進行列舉型別與字串型別轉換了。示例 include intmain 在qss中我們可以這樣使用列舉型別 qtabbar customtabbar ...
Objective C 列舉型別和字串互轉方案
列舉型別的使用優勢沒啥好說的。但經常需要將它與字串進行轉換方便顯示或其它需求。在常見的方案中,多是先宣告,然後在實現檔案裡建立乙個對映表。這樣帶來的問題就是要分兩個檔案來管理,帶來管理不方便不好。使用前還在確保對映表已經初始化。顯然使用時還是有些許難受。如果全部改用巨集來實現則會好管理很多,而且對於...
數學型別與字元型別相互轉換
數學型別變數與字串相互轉換 這些函式都在stdlib.h裡 1 將數學型別轉換為字串可以用以下一些函式 舉例 crtimp char cdecl itoa int,char int 這是乙個將數字轉換為乙個字串型別的函式,最後乙個int表示轉換的進製 如以下程式 int ityep 3 char s...