2017-04-06 84 views
0

我:如何从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); 
} 

我想dynamicaly从在枚举的previuos情况相似元类型收集myStruct会员名称和类型。 赞:

QMetaObject structType; 
QStringList list = getStructMemberNames(structType); 

Qt是否有一个选项可以做到这一点? 我已经搜索了QMetaType,但我需要更多的权力来做到这一点。

回答

2

我不认为在Qt中有这样做的意思。

最接近的是QMetaObject,它公开信号,槽和属性;属性可以被看作像暴露成员变量,但这不完全是你问的。

另请注意,只有在由moc处理的QObject类中使用Q_ENUM时,QMetaEnum才有效。因此,为了与一个结构类似的东西,它只能用QObject中的struct和Q_STRUCT声明,但到目前为止这还不存在。

1

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

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