c++ - Qt:Q_OBJECT 中的枚举没有 meta.enumeratorCount() 的元数据,为什么?

标签 c++ qt qt4 qobject

我有以下类(class),我在其中尝试获取 enum MyEnum 的一些元数据。但是,当遍历 meta.enumeratorCount() 时,它的计数始终为 0。基本上我是在关注 this example 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 "";
}

最佳答案

您需要使用 the Q_ENUMS() macro 向元数据系统注册枚举。 :

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

关于c++ - Qt:Q_OBJECT 中的枚举没有 meta.enumeratorCount() 的元数据,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11679057/

相关文章:

c++ - 如何将 QMdiArea 小部件的背景 QBrush 设置为系统颜色的渐变?

c++11 可变参数模板和 std::endl

c++ - 范围内匹配点的比较器

qt - 如何使用 QOpenGLFramebufferObject 位 block 传输两个透明帧缓冲区对象?

c++ - qt 在 showEvent() 上隐藏一个控件

c++ - 使用 Qt 信号和槽从另一个类更改标签文本

c++ - CRTP 中的模板化派生类(奇怪的重复模板模式)

c++ - 从 Homography 矩阵计算比例、旋转和平移

c - 此函数声明的预期符号问题

c++ - QGLWidget::renderText 边界框