gpt4 book ai didi

c++ - QMetaEnum 和强类型枚举

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:08:53 25 4
gpt4 key购买 nike

使用普通枚举,我能够使用以下代码访问 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"

关于c++ - QMetaEnum 和强类型枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33215182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com