我正在尝试迭代枚举。
class MyEnumClass : public QObject
{
Q_GADGET
Q_ENUMS(MyEnum)
public:
enum MyEnum
{
a, b, c
};
MyEnumClass(QObject *parent = 0){}
};
void listAllItems()
{
QMetaObject meta = MyEnumClass::staticMetaObject;
int count = meta.enumeratorCount();
for (int i=0; i < count; ++i)
{
QMetaEnum m = meta.enumerator(i);
QString x;
MyEnumClass::MyEnum y;
x = m.valueToKey(i);
y = (MyEnumClass::MyEnum)m.value(i);
}
}
当我逐步完成循环时,我应该能够看到我的枚举,名称为x,值为y。
不幸的是我只能看到第一个值,count总是1。
我看了这个问题来弄清楚上面的代码 - 但我确实要求我的枚举,我的问题应该是另一个问题。 Qt: No metadata by meta.enumeratorCount() for enum in Q_OBJECT, why?
我错过了什么?
答案 0 :(得分:2)
在我看来,meta.enumeratorCount()
将返回已注册枚举的数量。在你的情况下,你只有一个。您希望通过调用MyEnum
获取与meta.enumerator(0)
对应的QMetaEnum
。然后,您可以使用QMetaEnum::keyCount
和QMetaEnum::key
列出枚举中的键。