使用普通枚举,我能够访问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不再认为它是一个枚举.
在使用强类型枚举时,是否有任何解决方案可以访问枚举的字符表示?
最佳答案 Q_ENUMS已过时,应该使用Q_ENUM,但以下代码适用于我们(Qt 5.5,您的问题可能是由旧的Qt版本引起的;
this question也是相关的):
.H:
#include <QObject>
class EnumClass : public QObject
{
Q_OBJECT
public:
enum class MyEnumType { TypeA, TypeB };
EnumClass();
Q_ENUM(MyEnumType)
private:
MyEnumType m_type;
};
的.cpp:
#include <QDebug>
#include <QMetaEnum>
#include <QMetaObject>
EnumClass::EnumClass()
{
m_type = MyEnumType::TypeA;
const QMetaObject &mo = EnumClass::staticMetaObject;
int index = mo.indexOfEnumerator("MyEnumType");
QMetaEnum metaEnum = mo.enumerator(index);
// note the explicit cast:
QString enumString = metaEnum.valueToKey(static_cast<int>(m_type));
qDebug() << enumString;
}
主要:
int main()
{
EnumClass asd;
return 0;
}
输出:
“TypeA”