网站首页 > 技术文章 正文
前言
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
猜你喜欢
- 2024-10-18 【Python】map函数的常见用法,你知道多少?
- 2024-10-18 Python 中的数据可视化:将列表转换为图形
- 2024-10-18 Java 把一个 List 转换为字符串(java list转成字符串)
- 2024-10-18 Java Stream API:将线性集合添加到Map,键为对象属性
- 2024-10-18 SpringBoot读取配置文件中的数据到map和list
- 2024-10-18 「Java」咦,它就是Map和List的儿子吧
- 2024-10-18 一日一技:举例说明python中的map()方法
- 2024-10-18 详解 Python Map 函数(python map函数的用法)
- 2024-10-18 你应该知道的Java Map 的七个常见问题!
- 2024-10-18 Java核心数据结构(List、Map、Set)原理与使用技巧
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)