【问题标题】:QML Qvariant from custom class来自自定义类的 QML Qvariant
【发布时间】:2016-01-02 20:36:13
【问题描述】:

我有我的自定义 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。

我有一些信号可以将媒体数组从 C++ 发送到 QML,但这个数组在 QList<Media> 内。如何将其转换为 QVariant 以便 QML 读取?

【问题讨论】:

    标签: qml qt5 qtquick2 qlist qvariant


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      • 2019-08-24
      • 1970-01-01
      相关资源
      最近更新 更多