首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从QMetaType中获取结构成员的名称?

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

Stack Overflow用户
提问于 2017-04-06 23:01:37
回答 2查看 335关注 0票数 0

我有:

代码语言:javascript
复制
struct myStruct {
    int m_valueA;
    float m_valueA;
    bool m_valueA;
};
Q_DECLARE_METATYPE(myStruct)

....

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

我可以从QMetaEnum获取枚举名称

代码语言:javascript
复制
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成员的名称和类型,类似于以前枚举的情况。像这样:

代码语言:javascript
复制
QMetaObject structType;
QStringList list = getStructMemberNames(structType);

Qt有这样做的选项吗?我已经搜索了QMetaType,但我需要更多的电源来完成这项工作。

EN

回答 2

Stack Overflow用户

发布于 2017-04-06 23:17:55

我不认为在Qt中有任何手段可以做到这一点。

最接近的是QMetaObject,它公开信号、槽和属性;属性可以像公开成员变量一样被看到,但这并不完全是您所要求的。

还要注意,只有当您在moc处理的QObject类中使用Q_ENUM时,QMetaEnum才有效。因此,对于类似于结构的东西,它只能与QObjects中的结构一起工作,并使用Q_STRUCT声明,但到目前为止,这还不存在。

票数 2
EN

Stack Overflow用户

发布于 2017-04-07 04:07:23

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

首先不要使用Qt,因为moc不支持生成这样的元数据。就这样。如果您愿意,您可以为moc打补丁,但它不能开箱即用。如果获取AST from clang,从它生成一些元数据记录,并将它添加到代码中,您可能会获得更大的成功。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43258877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档