来自自定义的 QML Qvariant class
QML Qvariant from custom class
我有我的自定义 C++ class: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 可读?
如果您使用 Q_DECLARE_METATYPE
.
注册这些 classes,则可以将自定义 classes 存储在 QVariant 对象中
这将使在您的 C++ 代码中从 Media
到 QVariant
的转换成为可能,但是 Media
class 将不能像您希望的那样在 QML 中使用.
相反,只需创建一个 QHash<QString, QVariant>
或 QMap<QString, QVariant>
来存储属性,因为它们会自动反转(参见 here)。
我有我的自定义 C++ class: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 可读?
如果您使用 Q_DECLARE_METATYPE
.
这将使在您的 C++ 代码中从 Media
到 QVariant
的转换成为可能,但是 Media
class 将不能像您希望的那样在 QML 中使用.
相反,只需创建一个 QHash<QString, QVariant>
或 QMap<QString, QVariant>
来存储属性,因为它们会自动反转(参见 here)。