1

我有以下课程,我尝试在其中获取一些元数据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 "";
}
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 回答