簡體   English   中英

如何從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,它公開了信號,插槽和屬性。 屬性看起來就像暴露成員變量,但這與您要求的不完全相同。

還要注意,僅當在由Moc處理的QObject類中使用Q_ENUM時,QMetaEnum才起作用。 因此,對於使用struct進行類似的操作,它僅適用於QObjects內部的struct並使用Q_STRUCT進行聲明,但到目前為止,該功能尚不存在。

如何從QMetaType獲取結構成員的名稱?

首先不要使用Qt,因為moc不支持生成此類元數據。 就這樣。 如果您願意,可以修補moc來為您完成此操作,但是開箱即用不起作用。 通過從clang獲取AST,從中生成AST並將其添加到代碼中,您可能會獲得更大的成功。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM