优秀的编程知识分享平台

网站首页 > 技术文章 正文

Qt C++中 Map 和 List 转换到 QML 中使用

nanyue 2024-10-18 07:37:39 技术文章 6 ℃

前言

C++中的 list 和 map 使用非常方便, 对应到 Qt 中的类型为 QList 和 QMap,在和 QML 交互的时候,可能也想用到这两个类型,或者说将 C++中的参数和 QML 中的参数进行相互转换使用,在 QML 中用到的是 JavaScript 语法,那么,今天来看一下如何在 C++和 QML 之前来对这两个类型进行相互转换使用。

正文

先明确一点,要在 C++和 QML 中使用 list 和 map 类型,不是直接使用 QList 和 QMap,而是另外两个来替换QVariantList 和 QVariantMap,而这两个只是 QList 和 QMap 的一个重定义的别名,先来看看其定义:

typedef QVariantMap
Synonym for QMap<QString, QVariant>.
typedef QVariantList
Synonym for QList<QVariant>.

所以其使用方法都是一样的。

接着直接来看示例:

先看看 QML 中的代码:
// MyItem.qml
Item {
function readValues(anArray, anObject) {
for (var i=0; i<anArray.length; i++)
console.log("Array item:", anArray[i])
for (var prop in anObject) {
console.log("Object item:", prop, "=", anObject[prop])
}
}
}

接着来看 C++中的调用方法:

// C++
QQuickView view(QUrl::fromLocalFile("MyItem.qml"));
QVariantList list;
list << 10 << QColor(Qt::green) << "bottles";
QVariantMap map;
map.insert("language", "QML");
map.insert("released", QDate(2010, 9, 21));
QMetaObject::invokeMethod(view.rootObject(), "readValues",
Q_ARG(QVariant, QVariant::fromValue(list)),
Q_ARG(QVariant, QVariant::fromValue(map)));

C++中定义了List 和 Map 类型,并调用 QML 中的函数,并在 QML 函数中将数据打印出来。

输出结果:

Array item: 10
Array item: #00ff00
Array item: bottles
Object item: language = QML
Object item: released = Tue Sep 21 2010 00:00:00 GMT+1000 (EST)

以上示例演示了如何将 C++中的 list 和 map 类型转换到 QML 中进行使用。那么,如果要将 QML 中的这两个类型转换到 C++中使用,也是一样的用法,可以在QML中将值创建为JavaScript数组或对象,并在将值传递给C ++时自动转换为QVariantList或QVariantMap。

点击领取Qt学习资料+视频教程~

链接:http://docs.qq.com/doc/DUlVwTW1FZlZuWE9G

最近发表
标签列表