Невозможно перебрать перечисление Qt

Я пытаюсь перебрать перечисление.

    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.

К сожалению, я могу видеть только первое значение, счетчик всегда равен 1.

Я посмотрел на этот вопрос, чтобы выяснить код выше - но я пересмотрел свой enum, моя проблема должна быть другой. Qt: нет метаданных с помощью meta.enumeratorCount() для enum в Q_OBJECT, почему?

Что мне не хватает?

1 ответ

Решение

Выглядит как meta.enumeratorCount() вернет количество зарегистрированных перечислений. В вашем случае у вас есть только один. Вы хотите получить QMetaEnum соответствует MyEnum позвонив meta.enumerator(0), Вы можете использовать QMetaEnum::keyCount а также QMetaEnum::key перечислить ключи в перечислении.

Другие вопросы по тегам