这种应用场景,我的理解是C++类负责一些业务的控制,然后把结果数据通过信号的方式传递给QML端进行展示,使用这种方式C++侧的控制类是一个单例类,然后使用下面的代码进行注册。
qmlRegisterSingletonInstance("MyObj", 1, 0, "MyObject", new MyObject());
在QML侧绑定C++信号
在QML侧绑定使用Connections即可,槽函数的名字的规则是,c++信号函数名前面加on关键字
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.5
import MyObj 1.0
Window {
id : window
width: 640
height: 480
visible: true
title: qsTr("Hello World")
// MyObject已经注册为一个单例类了,所以不需要ID进行引用
Connections {
target: MyObject // 在C++中注册的单例类
function onCppSig(s, i){ // 这里C++侧的信号是CppSig,前面加on
console.log(s, i)
}
}
}
在C++侧绑定
在C++侧绑定需要使用QML引擎查找qml侧要绑定槽的对象,首先获取到根元素对象,然后进行遍历找到想要的qml对象
在QML侧创建槽函数