QT列舉型別與字串型別相互轉換

2021-09-07 17:17:06 字數 1929 閱讀 1518

qt5以後(具體版本可能是5.10吧,這個不確定)採用以下方法

在qt中將列舉型別註冊(qt_q_enum或qt_q_flag)後,就可以利用qt的元物件進行列舉型別與字串型別轉換了。

**示例:

#include intmain() 

在qss中我們可以這樣使用列舉型別:

qtabbar#customtabbar 

qt中判斷訊號是否與槽連線:

qpushbutton btn;

int receivers = btn.receivers(signal(clicked(bool));

qt4.8則採用以下方法:

一、enum 自省1 23

constqmetaobject &mo = [classname]::staticmetaobject;

intindex = mo.indexofenumerator("[enumname]");

qmetaenum me = mo.enumerator(index);

若 enum 定義在當前類中,則可以簡寫為1

2intindex = staticmetaobject.indexofenumerator("[enumname]");

qmetaenum me = staticmetaobject.enumerator(index);

二、enum 轉換

1、 enum int1

enumcolor ;color c = (color)1;//c=whiteint i = red;       //i=0

2、 enum  string1

enumcolor ;

1qstring s ="white";

1intidx = 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(*****);

這裡注意在class t內宣告中新增q_object 巨集會經常有出現以下錯誤

undefined reference to staticmetaobject

解決辦法:

重新執行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...