繁体   English   中英

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

[英]How to get names of the struct members from QMetaType?

我有:

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成员的名称和类型,类似于之前的枚举案例。 喜欢:

QMetaObject structType;
QStringList list = getStructMemberNames(structType);

Qt可以选择执行此操作吗? 我已经搜索了QMetaType,但我需要更多功能来执行此操作。

我认为在Qt中没有任何这样做的意图。

最接近的是QMetaObject,它公开了信号,插槽和属性。 属性看起来就像暴露成员变量,但这与您要求的不完全相同。

还要注意,仅当在由Moc处理的QObject类中使用Q_ENUM时,QMetaEnum才起作用。 因此,对于使用struct进行类似的操作,它仅适用于QObjects内部的struct并使用Q_STRUCT进行声明,但到目前为止,该功能尚不存在。

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

首先不要使用Qt,因为moc不支持生成此类元数据。 就这样。 如果您愿意,可以修补moc来为您完成此操作,但是开箱即用不起作用。 通过从clang获取AST,从中生成AST并将其添加到代码中,您可能会获得更大的成功。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM