查看完整版本: [-- C++ 代码中访问 qml 对象的问题 --]

QTCN开发网 -> Qt QML开发 -> C++ 代码中访问 qml 对象的问题 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

hncllyy 2020-06-29 15:32

C++ 代码中访问 qml 对象的问题

针对单一qml文件,可以通过objectName属性获取, 但问题是, 如果是多个qml文件,而需要获取的objectName对象不是在main.qml文件内,而是由loader加载的qml文件, 怎么获取对象呢??

lemonzll 2020-06-29 17:39
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 2020-07-02 15:45
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 2021-01-14 01:00
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 2021-01-14 04:17
试下用QQmlProperty::writeProperty(item, "text", "xxxx")这样来设置属性,不要用setProperty。setProperty正常应该可以用,就是有的qt版本有bug,设置了不管用,之前碰到过,后来我就一直用的QQmlProperty来设置的


查看完整版本: [-- C++ 代码中访问 qml 对象的问题 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled