QT枚举类型与字符串类型相互转换 |
您所在的位置:网站首页 › qt中字符串转int › QT枚举类型与字符串类型相互转换 |
Qt5以后(具体版本可能是5.10吧,这个不确定)采用以下方法 https://www.cnblogs.com/dongc/p/5630444.html 在QT中将枚举类型注册(QT_Q_ENUM或QT_Q_FLAG)后,就可以利用QT的元对象进行枚举类型与字符串类型转换了。 代码示例: ![]() ![]() 在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=02、 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 |