无法迭代Qt枚举

时间:2014-08-19 21:27:12

标签: c++ qt enumeration qgadget

我正在尝试迭代枚举。

    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?

我错过了什么?

1 个答案:

答案 0 :(得分:2)

在我看来,meta.enumeratorCount()将返回已注册枚举的数量。在你的情况下,你只有一个。您希望通过调用MyEnum获取与meta.enumerator(0)对应的QMetaEnum。然后,您可以使用QMetaEnum::keyCountQMetaEnum::key列出枚举中的键。