2016-01-02 32 views
0

我有我的自定義的C++類:Media.hQML的QVariant

#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。

我有一些信號將媒體數組從C++發送到QML,但是這個數組在QList<Media>之內。我如何將它轉換爲QVariant以便QML可讀?

回答

2

如果您使用Q_DECLARE_METATYPE註冊這些類,則可以將自定義類存儲在QVariant對象中。

這將使您的C++代碼中的轉換可能從MediaQVariant,但Media類將不會在QML中使用,只要您願意。

相反,只需創建一個QHash<QString, QVariant>QMap<QString, QVariant>來存儲屬性,因爲它們會自動反轉(請參閱here)。

相關問題