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

话不多说,先上代码:

//main.cpp

#include 
#include 
#include 
#include 
#include 
#include 

#include "TransObj.h"
#include 
#include 
#include 

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

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

#include 
#include 

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 。

你可能感兴趣的:(QML 与 C++之间的数据传输)