• 2371阅读
  • 4回复

C++ 代码中访问 qml 对象的问题 [复制链接]

上一主题 下一主题
离线hncllyy
 

只看楼主 倒序阅读 楼主  发表于: 2020-06-29
针对单一qml文件,可以通过objectName属性获取, 但问题是, 如果是多个qml文件,而需要获取的objectName对象不是在main.qml文件内,而是由loader加载的qml文件, 怎么获取对象呢??
离线lemonzll

只看该作者 1楼 发表于: 2020-06-29
loader加载完成以后,用findChild配合objectName来查找对应的对象。还有种方式,你弄个cpp类,在qml里面调用cpp类的slot函数或者property,把qml里面的对象当作函数参数传过去。例如cpp里面有个slot函数void setObject(QObject* item),qml里面你要把id是a的qml对象传过去,你加上Component.onCompleted: cpp.setObject(a)就可以了
离线hncllyy

只看该作者 2楼 发表于: 2020-07-02
回 lemonzll 的帖子
lemonzll:loader加载完成以后,用findChild配合objectName来查找对应的对象。还有种方式,你弄个cpp类,在qml里面调用cpp类的slot函数或者property,把qml里面的对象当作函数参数传过去。例如cpp里面有个slot函数void setObject(QObject* item),qml里面你要把id是a的qml对象传过去,你加上 .. (2020-06-29 17:39) 

非常感谢你, 确实是个好主意。
只是目前已经解决了遇到的问题,暂时不能尝试你的这种方法了。
离线971586331

只看该作者 3楼 发表于: 2021-01-14
回 lemonzll 的帖子
lemonzll:loader加载完成以后,用findChild配合objectName来查找对应的对象。还有种方式,你弄个cpp类,在qml里面调用cpp类的slot函数或者property,把qml里面的对象当作函数参数传过去。例如cpp里面有个slot函数void setObject(QObject* item),qml里面你要把id是a的qml对象传过去,你加上 .. (2020-06-29 17:39) 

请问一下,我用findChild查找到对象后,用setProperty设置属性的值,比如设置Label的text,qml文件中Label的onTextChanged已经触发了,打印text也已经改变了,但ui的显示不更新是什么原因,我没用load加载qml,我是用SwipeView切换页面的
离线lemonzll

只看该作者 4楼 发表于: 2021-01-14
试下用QQmlProperty::writeProperty(item, "text", "xxxx")这样来设置属性,不要用setProperty。setProperty正常应该可以用,就是有的qt版本有bug,设置了不管用,之前碰到过,后来我就一直用的QQmlProperty来设置的
快速回复
限100 字节
 
上一个 下一个