2017-04-06 111 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,您可能會獲得更多成功,從中生成一些元數據記錄,並將其添加到您的代碼中。