来自自定义类的QML Qvariant

时间:2016-01-02 20:36:13

标签: qml qt5 qtquick2 qlist qvariant

我有自定义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>内。如何将其转换为QVariant以便QML可读?

1 个答案:

答案 0 :(得分:2)

如果使用Q_DECLARE_METATYPE注册这些类,则可以在QVariant对象中存储自定义类。

这将使您的C ++代码中的Media转换为QVariant,但Media类将无法在QML中使用。

相反,只需创建一个QHash<QString, QVariant>QMap<QString, QVariant>来存储属性,因为它们会自动反转(请参阅here)。