Qt:이 없는 메타데이터에 의해 meta.enumeratorCount()열거에 Q_OBJECT,왜?
문제
나는 다음과 같은 클래스는 곳에 나를 얻으려고 일부의 메타데이터 enum MyEnum
.그러나,경우루 meta.enumeratorCount()
수은 항상 0.기본적으로 내가 다음 이 예제.를 찾기 위해서는,문제도 이와 같은 방법도 같은 문제 방법 count0.코드를 컴파일하고,오류 없이 없는 경고입니다.
어야 바보 같은 실수....어쩌면 당신이 도움이 될 수 있습니다 me
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 "";
}
해결책
당신이 등록하는 데 필요한 열거된 메타데이터를 사용하여 시스템 이 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);
};
제휴하지 않습니다 StackOverflow