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

How to get names of the struct members from QMetaType?

本文关键字:成员 结构 获取 QMetaType      更新时间:2023-10-16

我有:

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,它公开信号,插槽和属性;属性可以被视为公开成员变量,但这并不完全是你所要求的。

另请注意,QMetaEnum 仅在 moc 处理的 QObject 类中使用Q_ENUM时才有效。因此,对于使用结构制作类似的东西,它仅适用于 QObjects 中的结构并使用 Q_STRUCT 声明,但到目前为止,这还不存在。

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

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