我有:
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,但我需要更多的力量才能做到这一点。
答案 0 :(得分:2)
我认为在Qt中没有任何意义。
最接近的是QMetaObject,它暴露信号,槽和属性;可以看到属性就像暴露成员变量一样,但这并不是你所要求的。
另请注意,只有在moc处理的QObject类中使用Q_ENUM时,QMetaEnum才有效。因此,对于与结构类似的东西,它只适用于QObjects中的struct并且使用Q_STRUCT进行声明,但是现在这不存在。
答案 1 :(得分:1)
如何从QMetaType获取struct成员的名称?
不使用Qt开头,因为moc
不支持生成此类元数据。就这样。如果您愿意,可以修补moc
为您执行此操作,但开箱即用它不起作用。通过获取AST from clang,从中生成一些元数据记录并将其添加到代码中,您可能会获得更多成功。