我有:
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,但我需要更多的电源来完成这项工作。
发布于 2017-04-06 23:17:55
我不认为在Qt中有任何手段可以做到这一点。
最接近的是QMetaObject,它公开信号、槽和属性;属性可以像公开成员变量一样被看到,但这并不完全是您所要求的。
还要注意,只有当您在moc处理的QObject类中使用Q_ENUM时,QMetaEnum才有效。因此,对于类似于结构的东西,它只能与QObjects中的结构一起工作,并使用Q_STRUCT声明,但到目前为止,这还不存在。
发布于 2017-04-07 04:07:23
如何从QMetaType中获取结构成员的名称?
首先不要使用Qt,因为moc不支持生成这样的元数据。就这样。如果您愿意,您可以为moc打补丁,但它不能开箱即用。如果获取AST from clang,从它生成一些元数据记录,并将它添加到代码中,您可能会获得更大的成功。
https://stackoverflow.com/questions/43258877
复制相似问题