C++访问QML控件
- C++访问QML控件属性
- C++访问QML控件及子控件属性
- C++访问QML控件内函数
- QML触发信号,C++侧接收信号
- C++触发QML侧信号,QML接收信号
创建一个QML项目,其中main.qml文件如下
bash
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Rectangle
{
objectName: "innerRect"
width: 100
height: 200
anchors.centerIn: parent
color: "red"
}
}
C++访问QML控件属性

engine是QML加载引擎,通过该引擎可以拿到Window控件的对象(engine.rootObjects()返回一个列表)
QObject* rootObj = qmlObjList.first(); //拿到QML控件Window
需包含QQmlProperty头文件可以属性设置
QQmlProperty(rootObj, "title").write("Hello QML"); //对属性设置
QQmlProperty(rootObj, "width").write(700);
#C++访问QML子控件属性
通过rootObj->findChild<QObject*>("innerRect")得到子控件对象,"innerRect"是qml中objectName属性

C++访问QML控件内函数
如下qml中定义函数testFunc包含一个入参和返回值

C++通过QMetaObject::invokeMethod调用传入入参并接收返回值即可完成

C++触发QML侧信号,QML接收信号
bash
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
//qml端信号,C++触发信号
signal qmlTestSig()
//qmlTestSig对应槽函数
onQmlTestSig:
{
console.log("qmlTestSig signal called");
}
Rectangle
{
objectName: "innerRect"
width: 100
height: 200
anchors.centerIn: parent
color: "red"
}
}
如上qml侧定义信号,C++侧QMetaObject::invokeMethod触发

QML触发信号,C++侧接收信号
qml侧信号定义


如上MyTest负责接收信号
QML调用C++对象属性
首先创建C++对象,通过Q_PROPERTY设置属性

注册C++对象给QML使用

QML使用C++对象属性
