C++与Qml数据交互

5 篇文章 1 订阅

C++与QML交互

在QML工程中,一般QML界面只负责前端交互,而真正的业务逻辑都是C++模块实现的。为了实现前端和后端的顺利衔接,我们需要做好QML界面与C++的交互。 这里举例介绍一种C++逻辑处理结果给QML界面使用的方法。

需求

当前工业需求发展迅速,很多工业级生产都开始不仅仅局限于功能的实现,效率开始成为大家相互比较优缺的一种方式。 在QML项目中,QML一般仅负责界面的处理,并不会涉及逻辑方面,所以,很多时候,C++与QML的通讯问题成为刚入门QMLの朋友们一大难题。

这里我们使用C++处理加工开始与加工结束这一段时间的用时,然后刷新到QML界面进行关联并显示。

C++

//类  头文件
public slots:
	void getCurrentStartTime();  //获取开始时间
	void getCurrentEndTime();    //获取结束时间
	QString setWorkTime();  	//计算时间戳

public:
	QDateTime nStartTime;
	QDateTime nEndTime;

signals:
	void refreshSignal(QString msg);  //QML获取C++数据的信号函数,无需实现
//类 cpp文件
// 假设类为A
void  A::getCurrentStartTime()
{
	nStartTime = QDateTime::currentDateTime();
}

void A::getCurrentEndTime()
{
	nEndTime = QDateTime::currentDateTime();
}

QString A::setWorkTime()
{
	QTime m_time;
	m_time.setHMS(0,0,0,0);  //初始化数据 时、分、秒、毫秒
	return m_time.addSecs(nStartTime.secsTo(nEndTime)).toString("hh:mm:ss");  //返回格式化数据
}
// C++ 实际调用

//开始加工:
A::ins().getCurrentEndTime();   //ins是注册在QML那边的一个东西,类似C++类对象

//结束加工:
A::ins().getCurrentEndTime();
//计算加工用时并传入QML
emit A::ins().refreshSignal(A::ins().setWorkTime());

QML

QML绑定、通过C++emit信号进行改变界面并刷新

KTextInput{
	//需要刷新的控件
	id: id_worktime_value
	anchors.top: id_grid.bottom
	anchors.topMargin: 5
	x: 280
	height: 25
	width: 100
	selectTextByMouse: true  //是否可通过鼠标选中
	clip: true
	displayText: editText = workParamSettings.strTimeSpace
	enabled: true
	Component.onCompleted: {
		//绑定
		a.refreshSignal.connect(id_worktime_value.recvWorkTime)
	}

	//刷新时间
	function recvWorkTime(str) {
		id_worktime_value.editText = str
	}
}

代码块中类似 workParamSettings.strTimeSpace 就是QML与C++注册的类似C++的类对象,QML全局可调用,如下:

QQmlApplicationEngine engine;
engine..addImportPath(app.applicationDirPath() + "/qml");

//下面的除开第一句,第二句第一个参数都是小写开头,C++绑定的参数也是,小写开头
qmlRegisterSingletonInstance("QLCut", 1, 0, "KDrawingView", &KDrawingView::ins());
engine.rootContext()->setContextProperty("workParamSettings", &KWorkParamSettings::ins());

上面的方法只是C++与QML 交互的一种方式,仅供技术学习交流…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cain Xcy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值