我在专栏专门写了一篇文章,全面的来讲这个问题:武威的涛哥:Qml组件化编程5-Qml与C++交互zhuanlan.zhihu.com
以下原答案
前面"赵者也" 说的挺好,我稍微补充一些。
1、c++访问Qml,他说了QQmlComponent的方式,其实还有一种是findChild的方式。
熟悉Qt的人都知道,Qt的很多对象是QObject的子类,然后这些QObject是有父子关系的。可以通过findChild的方式拿到的。Qml的基本元素都是QObject的子类,所以道理是一样的。
比如有如下的Qml
Item {
...
Rectangle {
id: helloRect
objectName: "hello"
signal work1(name);
onWork1: {
console.log("work1", name)
}
function work2(name) {
console.log("work2", name)
return "workOver"
}
}
...
}
一般通过
auto pItem = QQuickView::rootObject()->findChild("hello");
Q_ASSERT(pItem)
或者