如何从QMetaType获取结构成员的名称?

时间:2017-04-06 15:01:37

标签: c++ qt enums metadata

我有:

struct myStruct {
    int m_valueA;
    float m_valueA;
    bool m_valueA;
};
Q_DECLARE_METATYPE(myStruct)

....

struct myStructXY {
    ....
};
Q_DECLARE_METATYPE(myStructXY)

我可以从QMetaEnum获取枚举名称:

Q_ENUM(myEnum)
QMetaEnum enumTypes QMetaEnum::fromType<myEnum>();

QMap<qint32, QString> labelsMap;
for(int i = 0; i < enumTypes.keyCount(); i++)
{
    QString enumName = QString(enumTypes.key(i));
    labelsMap.insert(enumTypes.value(i), enumName);
}

我想动态地从元类型中收集myStruct成员名称和类型,类似于以前的Enums案例。 像:

QMetaObject structType;
QStringList list = getStructMemberNames(structType);

Qt有选择吗? 我搜索了QMetaType,但我需要更多的力量才能做到这一点。

2 个答案:

答案 0 :(得分:2)

我认为在Qt中没有任何意义。

最接近的是QMetaObject,它暴露信号,槽和属性;可以看到属性就像暴露成员变量一样,但这并不是你所要求的。

另请注意,只有在moc处理的QObject类中使用Q_ENUM时,QMetaEnum才有效。因此,对于与结构类似的东西,它只适用于QObjects中的struct并且使用Q_STRUCT进行声明,但是现在这不存在。

答案 1 :(得分:1)

  

如何从QMetaType获取struct成员的名称?

不使用Qt开头,因为moc不支持生成此类元数据。就这样。如果您愿意,可以修补moc为您执行此操作,但开箱即用它不起作用。通过获取AST from clang,从中生成一些元数据记录并将其添加到代码中,您可能会获得更多成功。