2017-04-06 21 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メンバーの名前と種類を収集したいと思います。 Like:

QMetaObject structType; 
QStringList list = getStructMemberNames(structType); 

Qtにはオプションがありますか? 私はQMetaTypeを検索しましたが、これを行うにはもっと力が必要です。

答えて

2

Qtでこれを行うという意味はありません。

シグナル、スロット、およびプロパティを公開するQMetaObjectが最も近いでしょう。プロパティはメンバー変数を公開するように見えるかもしれませんが、それはあなたが尋ねたこととまったく同じではありません。

QMetaEnumは、mocで処理されたQObjectクラスでQ_ENUMを使用した場合にのみ機能します。だから、構造体と似たようなものを作るためには、QObjects内の構造体でのみ動作し、Q_STRUCTで宣言されていましたが、今のところこれは存在しません。

1

QMetaTypeから構造体メンバの名前を取得する方法は?

mocは、このようなメタデータの生成をサポートしていないため、最初はQtを使用していません。それで全部です。あなたが望むなら、mocにパッチを当てることができますが、それは動作しません。 AST from clangを取得し、そこからいくつかのメタデータレコードを生成してコードに追加することで、より多くの成功を収められます。

関連する問題