1

のメタデータを取得しようとする次のクラスがありenum MyEnumます。ただし、そのカウントをループするmeta.enumeratorCount()と常に0になります。基本的に、この例hereに従っていました。問題を見つけるために、私はメソッドでも同じことを試みていました.同じ問題-メソッドカウント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 "";
}
4

1 に答える 1

2

マクロを使用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);
};
于 2012-07-26T23:43:02.143 に答える