QML 与 C++之间的数据传输

本文介绍了一个具体的Qt跨平台应用实例,演示了C++与QML之间的数据交互过程。通过一个简单的例子,详细展示了如何从QML传递数据到C++并触发信号,以及如何从C++发送数据回QML。代码示例涵盖了main函数中的组件注册、信号槽机制的使用,以及QML中信号的连接和响应。
摘要由CSDN通过智能技术生成

话不多说,先上代码:

//main.cpp

#include <QGuiApplication>
#include <qqmlapplicationengine>
#include <qtqml>
#include <QTextCodec>
#include <QQmlContext>
#include <QQuickView>

#include "TransObj.h"
#include <thread>
#include <Windows.h>
#include <iostream>

int main(int argc, char *argv[])
{
	QGuiApplication app(argc, argv);
	qmlRegisterType<Gemini>("an.qml.TransObj", 1, 0, "TransObj");
	QQmlApplicationEngine engine;
	engine.load(QUrl(QStringLiteral("Test.qml")));

	return app.exec();
}
//TransObj.h
#pragma once

#include <qobject>
#include <qdebug>

class Gemini : public QObject
{
	Q_OBJECT
public:
	Q_INVOKABLE void getValFromQml(int v) {
		qDebug() << "value from qml is :" << v;
		emit valueFromCpp(456);
	}
signals:
	void valueFromCpp(int val);
};
//Test.qml
import QtQuick 2.6
import QtQuick.Window 2.2
import QtQuick.Controls 2.1
import QtQuick.Controls.Styles 1.2
import QtQuick.Dialogs 1.2
import an.qml.TransObj 1.0

//主窗体
Window {
    id:window;
    visible: true;
    width: 600;
    height: 480;
    minimumWidth: 480;
    minimumHeight: 380;
	TransObj{
		id:transobj;
		onValueFromCpp:{
			console.log("value from cpp :" + val);
		}
    }

	Button {
        id: test;
        text: "test";
        anchors.left:parent.left;
        anchors.bottom: parent.bottom;
        onClicked: {
			transobj.getValFromQml(123);
		}
    }

}

 

main函数中注册一个中间类TranObj用于数据的传输,没有其他操作。

 

一.qml传数据到c++

1.TranObj.h中定义一个开放给qml调用的函数 Q_INVOKABLE void getValFromQml(var v){}

2.qml中 通过(1)import ,(2) 定义TransObj{ id:transobj;}得到变量transobj.

3.通过变量直接调用getValFromQml(123),把值123传入c++

 

二.c++传数据到qml

1.TranObj.h中定义信号valueFromCpp(var v)

2.qml中 通过定义TransObj{ id:transobj;}时直接链接此信号。

3.链接信号的方式是on+首字母大写函数名,onValueFromCpp:{},在该函数中可以直接使用v的值,变量名为.h中信号函数中的参数名。

4.通过emit valueFromCpp(456) 把值456传入qml 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值