概述
C++与QML交互
- 需求
- 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 交互的一种方式,仅供技术学习交流…
最后
以上就是优雅战斗机为你收集整理的C++与Qml数据交互需求C++QML的全部内容,希望文章能够帮你解决C++与Qml数据交互需求C++QML所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复