【发布时间】:2016-01-17 20:17:16
【问题描述】:
使用普通枚举,我可以使用以下代码访问 Q_ENUMS 属性和特定的枚举字符表示:
// in .h
class EnumClass : public QObject
{
Q_OBJECT
public:
enum MyEnumType { TypeA, TypeB };
Q_ENUMS(MyEnumType)
private:
MyEnumType m_type;
};
// in .cpp
m_type = TypeA;
...
const QMetaObject &mo = EnumClass::staticMetaObject;
int index = mo.indexOfEnumerator("MyEnumType");
QMetaEnum metaEnum = mo.enumerator(index);
QString enumString = metaEnum.valueToKey(m_type); // contains "TypeA"
如果我想将 c++11 的功能用于强类型枚举,比如
enum class MyEnumType { TypeA, TypeB };
访问元信息不再起作用。我猜,Qt 不再将其识别为枚举。
在使用强类型枚举时,是否有任何解决方案可以访问枚举的字符表示?
【问题讨论】:
-
你使用的是哪个 Qt 版本?
-
@SingerOfTheFall:我们仍在使用 qt4.8,但只要有时间就会切换到 qt5。
-
我不太确定,但这可能与您的 Qt 版本有关。另外,检查stackoverflow.com/questions/6513736/…
-
@SingerOfTheFall:你是对的,根据你的链接 4.8 只支持 C++0x 的一些特性,强类型枚举不在其中。我尝试了 qt 5.2.1,它确实有效。
标签: c++ qt c++11 enums strong-typing