2016-01-02 35 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)。

相关问题