QML学习笔记(五十三)QML与C++交互:数据转换——序列类型与 JavaScript 数组的转换

前言

本节介绍一下序列类型和数组之间的转换,简单来说就是C++的QVetor和qml中的数组之间的转换。

一、代码示例

只展示核心代码:

cpp 复制代码
class CppClass : public QObject
{
    Q_OBJECT

public:
    explicit CppClass(QObject *parent = nullptr);

    Q_INVOKABLE void qmlArrayToCpp(QVector<QString> vector);
    Q_INVOKABLE QVector<QString> retrieveStrings();
private:
    QVector<QString> mVector;
};
cpp 复制代码
#include "cppclass.h"
#include <QDebug>

CppClass::CppClass(QObject *parent) : QObject(parent)
{
    mVector.append("One");
    mVector.append("Two");
    mVector.append("Three");
    mVector.append("Four");
}

void CppClass::qmlArrayToCpp(QVector<QString> vector)
{
    foreach (QString string, vector){
        qDebug()<< string;
    }
}

QVector<QString> CppClass::retrieveStrings()
{
    return mVector;
}
cpp 复制代码
import QtQuick 2.14
import QtQuick.Window 2.14
import QtQuick.Controls 2.12
import com.mycompany 1.0

Window {
	// ...
    CppClass{
        id: cppClassId
    }

    Button{
        id: buttonId
    }
    Button{
        id:button1Id
        text:"Send to C++"
        x: buttonId.x + buttonId.width
        onClicked:function(){
            var arr = ['Apple', 'Banana','Avocado','Pear','Orange'];
            cppClassId.qmlArrayToCpp(arr)
        }
    }
    Button{
        id: button2Id
        text:"Read form C++"
        anchors.left: button1Id.right
        onClicked:function(){
            var arr = cppClassId.retrieveStrings()
            print("The length of the array is:"+ arr.length)
            arr.forEach(function(element){
                console.log(element)
            })
        }
    }
}

打印:

可以看到,其实并不需要什么特殊处理的转换,qt会自动匹配转换的。

二、总结

这种数组和序列的数据是很常见的变量,从C++发送到qml进行前端展示,或者从qml端搜集后要发送到C++端进行存储和管理都是很常见的需求。

相关推荐
婷婷_1727 分钟前
【PCIe 验证每日学习・Day22】PCIe 拓扑结构与 Switch / 桥片转发全解析
网络·学习·程序人生·芯片·pcie·pcie学习·pcie 拓扑
落痕的寒假7 分钟前
[深度学习] 大模型学习7-多模态大模型全景解析
人工智能·深度学习·学习
HABuo24 分钟前
【linux线程(二)】线程互斥、线程同步、条件变量详细剖析
linux·运维·服务器·c语言·c++·ubuntu·centos
Rabitebla26 分钟前
归并排序(MergeSort)完全指南 —— 从原理到非递归实现
c语言·数据结构·c++·算法·排序算法
墨^O^28 分钟前
进程与线程的核心区别及 Linux 启动全过程解析
linux·c++·笔记·学习
寒秋花开曾相惜28 分钟前
(学习笔记)3.9 异质的数据结构(3.9.1 结构)
c语言·网络·数据结构·数据库·笔记·学习
福楠29 分钟前
现代C++ | C++14甜点特性
linux·c语言·开发语言·c++
WBluuue29 分钟前
Codeforces Educational 188(ABCDEF)
c++·算法
charlie11451419131 分钟前
嵌入式C++教程实战之Linux下的单片机编程:从零搭建 STM32 开发工具链(4)从零构建 STM32 构建系统
linux·开发语言·c++·stm32·单片机·学习·嵌入式
AI成长日志34 分钟前
【笔面试算法学习专栏】双指针专题:简单难度三题精讲(167.两数之和II、283.移动零、344.反转字符串)
学习·算法·面试