Qt:meta.enumeratorCount() 没有元数据用于 Q_OBJECT 中的枚举,为啥?

Posted

技术标签:

【中文标题】Qt:meta.enumeratorCount() 没有元数据用于 Q_OBJECT 中的枚举,为啥?【英文标题】:Qt: No metadata by meta.enumeratorCount() for enum in Q_OBJECT, why?Qt:meta.enumeratorCount() 没有元数据用于 Q_OBJECT 中的枚举,为什么? 【发布时间】:2012-07-26 22:37:49 【问题描述】:

我有以下课程,我尝试获取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 "";

【问题讨论】:

【参考方案1】:

您需要使用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);
;

【讨论】:

非常感谢,如果您对后续工作有任何想法,也许您可​​以再次帮助我。如果没有,请不要介意。 ***.com/questions/11690684/…

以上是关于Qt:meta.enumeratorCount() 没有元数据用于 Q_OBJECT 中的枚举,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

qt编译问题

Linux 打包 QT 程序

QT学习之QT 下载安装

Qt 找不到服务 - “org.qt-project.qt.mediaplayer”

[QT]加快qt编译:设置默认多核编译qt

qt + opengl 开发环境的搭建