qml调用C++函数
1.定义头文件和cpp文件
2.在main.cpp中进行注册
// 注册c++类到qml 参数分别为导入的 模块名称 主版本号 次版本号 模块名称
qmlRegisterType<CppObject>("CppObject",1,0,"CppObject");
3.在qml中导入
import CppObject 1.0
CppObject{
id:cppobj
}
4.通过id+方法名的方式调用
注意:
// 加上这个宏,当前函数就可以被qml访问调用
Q_INVOKABLE void func();
qml定义信号连接C++的槽函数
第一种方法
// 定义信号
signal qmlSig(int i, string s)
Button{
onClicked: {
qmlSig(10,"zhangsan")
}
}
Connections{
target: window
function onQmlSig(i,s){
cppobj.cppSlot(i,s)
}
}
Component.onCompleted: {
qmlSig.connect(cppobj.cppSlot)
}
第二种通过c++连接:
在main.cpp中如下:
需要注意要给组件设置objectName
// engine 加载完成后 load以后
auto list = engine.rootObjects();
//auto objName = list.first()->objectName(); // 获取第一个objname
// auto mybuttonObj = list.first()->findChild<QObject *>("mybutton");
auto window = list.first();
// 第一个参数为组件
// 第二个为信号名
// 第三个为类的实例化
// 第三个为槽函数
QObject::connect(window,SIGNAL(qmlSig(int,QString)),
CppObject::getInstance(),SLOT(cppSlot(int,QString)));