Qt: нет метаданных с помощью meta.enumeratorCount() для enum в Q_OBJECT, почему?

У меня есть следующий класс, где я пытаюсь получить некоторые метаданные enum MyEnum, Однако при зацикливании meta.enumeratorCount() его счет всегда равен 0. В основном я следовал этому примеру здесь. Чтобы найти проблему, я пытался сделать то же самое с методами, та же проблема - метод с номером 0. Код компилируется, ошибок нет, предупреждений нет.

Должно быть глупая ошибка.... может быть, вы можете мне помочь

class FsxSimConnectQtfier : public QObject
{
    Q_OBJECT
public:
    explicit FsxSimConnectQtfier(QObject *parent = 0);
    enum MyEnum { G1, G2 };
    static const QString simConnectExceptionToString(const DWORD id);
};

const QString FsxSimConnectQtfier::simConnectExceptionToString(const DWORD id) {
    // int i= FsxSimConnectQtfier::staticMetaObject.indexOfEnumerator("MyEnum");
    // -1 -> not found, why?
    QMetaObject meta = FsxSimConnectQtfier::staticMetaObject;
    for (int i=0; i < meta.enumeratorCount(); ++i) {
        QMetaEnum m = meta.enumerator(i); // never reached, why?
    }
    return "";
}

1 ответ

Решение

Вам необходимо зарегистрировать перечисление в системе метаданных, используя Q_ENUMS() макрос:

class FsxSimConnectQtfier : public QObject
{
    Q_OBJECT
    Q_ENUMS(MyEnum)  // <--- 

public:
    explicit FsxSimConnectQtfier(QObject *parent = 0);
    enum MyEnum { G1, G2 };
    static const QString simConnectExceptionToString(const unsigned int id);
};
Другие вопросы по тегам