如何从 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,它公开信号,插槽和属性;属性可以被视为公开成员变量,但这并不完全是你所要求的。
另请注意,QMetaEnum 仅在 moc 处理的 QObject 类中使用Q_ENUM时才有效。因此,对于使用结构制作类似的东西,它仅适用于 QObjects 中的结构并使用 Q_STRUCT 声明,但到目前为止,这还不存在。
如何从QMetaType获取结构成员的名称?
一开始不使用Qt,因为moc
不支持生成此类元数据。就这样。如果您愿意,您可以修补moc
为您完成此操作,但开箱即用不起作用。通过从 clang 获取 AST,从中生成一些元数据记录并将其添加到代码中,您可能会取得更大的成功。
相关文章:
- 如何在C++中定义静态成员结构
- 使用模板化类的成员结构
- 初始化固定的 C 数组成员结构
- 指向成员结构的指针如何工作
- 如何将此“指针从外部类传递到成员结构
- 导致IAR ARM中出现错误的成员结构位字段元素的Initializer列表初始化
- 映射文件中成员结构的地址
- Visual C++ 模板类成员结构初始化语法糖
- C :初始化成员结构的静态字段的正确方法
- 如何在C 类的初始化器列表中使用未命名结构初始化成员结构
- 从成员结构的成员函数中访问类的成员?
- 模板化类的成员函数无法返回指向成员结构的指针?
- 重载非类型模板结构的成员结构的复制赋值运算符
- 灵气属性传播问题与单成员结构.
- 将具有 int* 成员C++结构编接到 C#
- 复杂的班级成员结构
- 将向量成员(结构)传递给函数
- 成员结构的前向声明
- 重载运算符<<用于模板结构中定义的成员结构
- 返回带有模板化类的类成员结构