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);
};