qt之qml与C++数据交互

本文介绍Qt框架下QML与C++的数据交互,包括QML如何将数据传递给C++以及C++如何将数据传递给QML,详细讲解了数据传递的步骤、注意事项及JSON转换。适合Qt开发者参考。
摘要由CSDN通过智能技术生成

我是一名Android开发出生,在大学学的是javaweb方向的开发,不能说javaweb方向的东西都精通,但是至少应该能捡的起来。因为个人的爱好“喜欢看到一些看起来炫酷的东西”所以开始了漫长的接近四年的开发之旅。也是因为工作的原因,开始接触linux的应用层开发。

学习的心得:从android学习的过程中,我明白了一件事,懂得站在巨人的肩膀上。在查询资料的过程中也发现,纵然qml的起源比android要早的多,但是网上关于qml的学习资料却没有android的多。作为一名android过来的,我开始分享工作中接触到的东西,希望对更多人有所帮助,试一次总结,也是一次分享。

记得有个门外汉,曾经问过我一个问题:“如果有个代码仓库,是不是所有的程序员都是从里面根据自己的需要复制黏贴就可以了?” 。我的回答是肯定的,只是目前对于代码仓库的筛选与查找是我们的工作。

在我做Android的时候我发现,很多原来可以从github上面找到的功能自己写了还有一堆的bug,而且非常痛苦,所以真的建议大家在写具体的功能之前,先去github上面找找,也许能帮助你。github上面可以过滤语言,大家可以过滤一下qml进行查看,目前基本上都是一些example。不过也非常的有帮助。

在我做公司安排的项目的时候,本着沿用android上面可以复用的知识点的原则,架构方面我选用了广受好评的facebook出的flux,有不懂的可以自行百度一下,原则就一个“事件分发,单向流动”。

qml界面和c++界面之间传递数据

qml与c++之间的交互天然的与flux架构一致。可以直接套用,所有的事件通过信号进行分发。与android的EventBus差不多。

qml传递数据给c++

一般用于传递qml【View】上面的一些操作。比方说点击事件,请求发起事件等等。

我使用的方式是,统一交给ActionCrateor.qml进行分发,这里涉及qml的单例方式,可以看这篇文章 要记得单例的使用要使用相对路径,比方说我本地的代码结构是

所以在别的目录里面使用就需要使用相对路径

// /a/b/xxx.qml  相对于 /action/XActionCreator.qml的位置

import "../../action"

复制代码

为了保持一致,我这边都是使用json进行传递,而不使用对象类型进行传递

//qmldir

singleton ActionCreator 1.0 XActionCreator.qml
singleton Constant 1.0 Constant.qml
复制代码
// XActionCreator.qml

pragma Singleton
import QtQuick 2.0
import SigDispatcher 1.0

Item {
    //"send_xxx(作用)" 命名的规则

    //发送事件
    function send_initData(){
        //统一发送
        //调用某个对象的信号
        dispatcher.sendEvent("active","");
    }

    //切换专辑,重新请求
    function send_getAlbumData(param){
        //param 参数,请求参数,页数?cid?
        dispatcher.sendEvent("album_get_new",param);
    }
    //c++的对象
    SigDispatcher{
        id:dispatcher
    }

}
复制代码

此时需要在主入口处加上SigDispatcher

    qmlRegisterType <SigDispatcher> ("SigDispatcher", 1, 0, "SigDispatcher");
复制代码
准备
//SigDispatcher.h

#ifndef SIG_DISPATCHER_H
#define SIG_DISPATCHER_H
#include <QObject>
#include <QString>
#include <QHash>
#include <QVector>
#include <QVariant>

#include "sig/si
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值