Я пытаюсь перебрать перечисление.
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, почему?
Что мне не хватает?
Выглядит как meta.enumeratorCount()
вернет количество зарегистрированных перечислений. В вашем случае у вас есть только один. Вы хотите получить QMetaEnum
соответствует MyEnum
позвонив meta.enumerator(0)
, Вы можете использовать QMetaEnum::keyCount
а также QMetaEnum::key
перечислить ключи в перечислении.