QT枚举类型与字符串类型相互转换

您所在的位置:网站首页 qt中字符串转int QT枚举类型与字符串类型相互转换

QT枚举类型与字符串类型相互转换

2023-07-06 15:27| 来源: 网络整理| 查看: 265

Qt5以后(具体版本可能是5.10吧,这个不确定)采用以下方法

https://www.cnblogs.com/dongc/p/5630444.html

在QT中将枚举类型注册(QT_Q_ENUM或QT_Q_FLAG)后,就可以利用QT的元对象进行枚举类型与字符串类型转换了。

代码示例:

复制代码 #include int main() { QMetaEnum metaEnum = QMetaEnum::fromType(); //字符串转枚举值 Qt::Alignment alignment = (Qt::Alignment)metaEnum.keyToValue("Qt::AlignLeft"); alignment = (Qt::Alignment)metaEnum.keysToValue("Qt::AlignLeft | Qt::AlignVCenter"); //枚举值转字符串 const char* s = metaEnum.valueToKey(Qt::AlignCenter); return 0; } 复制代码

在qss中我们可以这样使用枚举类型:

QTabBar#CustomTabBar { /* Qt::AlignmentFlag定义 */ qproperty-text_align: "AlignLeft | AlignVCenter"; }

 QT中判断信号是否与槽连接:

QPushButton btn; int receivers = btn.receivers(SIGNAL(clicked(bool));

qt4.8则采用以下方法:

https://www.cnblogs.com/FindSelf/p/4901520.html

一、enum 自省

1 2 3 const QMetaObject &mo = [ClassName]::staticMetaObject; int index = mo.indexOfEnumerator("[EnumName]"); QMetaEnum me = mo.enumerator(index);

若 enum 定义在当前类中,则可以简写为

1 2 int index = staticMetaObject.indexOfEnumerator("[EnumName]"); QMetaEnum me = staticMetaObject.enumerator(index);

二、enum 转换

1、 enum int

1 enum Color { Red, White, Blue};Color c = (Color)1;   //c=Whiteint i = Red;       //i=0

2、 enum  string

1 enum Color { Red, White, Blue}; 1 QString s = "White"; 1 int idx = mo.indexOfEnumerator("Color"); QMetaEnum iEnum = mo.enumerator(idx); int val = iEnum.keysToValue(s.toAscii()); 1 Color c = (Color)val ;

如果是自定义类中的自定义枚举,如下操作

class [ClassName]:public QObject { Q_OBJECT Q_ENUMS([EnumName]) public: enum [EnumName]{ client_1=0, client_2, client_3, client_4 }; };

使用的时候:

            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,问题就解决了。切记!!!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3