C++与QML交互
- 需求
- C++
- QML
在QML工程中,一般QML界面只负责前端交互,而真正的业务逻辑都是C++模块实现的。为了实现前端和后端的顺利衔接,我们需要做好QML界面与C++的交互。 这里举例介绍一种C++逻辑处理结果给QML界面使用的方法。
需求
当前工业需求发展迅速,很多工业级生产都开始不仅仅局限于功能的实现,效率开始成为大家相互比较优缺的一种方式。 在QML项目中,QML一般仅负责界面的处理,并不会涉及逻辑方面,所以,很多时候,C++与QML的通讯问题成为刚入门QMLの朋友们一大难题。
这里我们使用C++处理加工开始与加工结束这一段时间的用时,然后刷新到QML界面进行关联并显示。
C++
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13//类 头文件 public slots: void getCurrentStartTime(); //获取开始时间 void getCurrentEndTime(); //获取结束时间 QString setWorkTime(); //计算时间戳 public: QDateTime nStartTime; QDateTime nEndTime; signals: void refreshSignal(QString msg); //QML获取C++数据的信号函数,无需实现
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19//类 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"); //返回格式化数据 }
复制代码
1
2
3
4
5
6
7
8
9
10// C++ 实际调用 //开始加工: A::ins().getCurrentEndTime(); //ins是注册在QML那边的一个东西,类似C++类对象 //结束加工: A::ins().getCurrentEndTime(); //计算加工用时并传入QML emit A::ins().refreshSignal(A::ins().setWorkTime());
QML
QML绑定、通过C++emit信号进行改变界面并刷新
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23KTextInput{ //需要刷新的控件 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全局可调用,如下:
复制代码
1
2
3
4
5
6
7QQmlApplicationEngine engine; engine..addImportPath(app.applicationDirPath() + "/qml"); //下面的除开第一句,第二句第一个参数都是小写开头,C++绑定的参数也是,小写开头 qmlRegisterSingletonInstance("QLCut", 1, 0, "KDrawingView", &KDrawingView::ins()); engine.rootContext()->setContextProperty("workParamSettings", &KWorkParamSettings::ins());
上面的方法只是C++与QML 交互的一种方式,仅供技术学习交流…
最后
以上就是优雅战斗机最近收集整理的关于C++与Qml数据交互需求C++QML的全部内容,更多相关C++与Qml数据交互需求C++QML内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复