1

カスタム C++ クラスがあります: Media.h:

#ifndef MEDIA_H
#define MEDIA_H

class Media
{

public:
    explicit Media();
    virtual ~Media();

    void setAllMedia(QString id, QString type, QString media, QString meta);


signals:


private slots:


private:
    QString _id;
    QString _type;
    QString _media;
    QString _meta;
};

#endif

他のQMLファイルには、次のようなQMLバリアントから非常に良い値を読み取るコードがありますmain.ml::

property variant medias:[[]]
...
medias = [{
    "id": "7",
    "type": "image",
    "media": "1451138132567e9c544fc64.png",
    "meta": null
}, {
    "id": "8",
    "type": "image",
    "media": "1451150881567ece21bb77e.png",
    "meta": null
}, {
    "id": "9",
    "type": "video",
    "media": "1451150924567ece4c68775.png",
    "meta": null
}]

問題は、C++ からバリアント メディア配列を動的に作成し、それを QML に送信する必要があることです。

medias 配列を C++ から QML に送信するシグナルがいくつかありますが、この配列はQList<Media>. QVariantQMLで読めるように変換するにはどうすればよいですか?

4

1 に答える 1

3

これらのクラスを に登録すると、QVariant オブジェクト内にカスタム クラスを格納できますQ_DECLARE_METATYPE

これにより、C++ コードでからMediaへの変換が可能になりますが、QML では希望どおりにクラスを使用できません。QVariantMedia

代わりに、プロパティを格納するためにQHash<QString, QVariant>orを作成するだけです。QMap<QString, QVariant>これは、プロパティが自動的に反転されるためです (こちらを参照)。

于 2016-01-02T23:01:37.790 に答える