如何用findChild()
找到像C++中的对象,但来自javascript?
在QML端,你通常无法访问Qt/C++端的父/子关系,而只能访问视觉父/子关系,你需要求助于C++。
例如,你可以创建一个对象,它公开一个接受QObject
的方法,以及一个名称,并调用该对象的函数findChild
。
如果你只想找到一个可视子级,你可能只在 JS 中的可视化树上实现一个递归 bfs 并调用它。
但正如我在评论中所说:如果您需要这个,您可能在其他地方搞砸了,应该考虑一种方法来做到这一点,而无需findChild()
.不建议在C++中使用它,在QML中当然也不建议使用它。
由于它是递归搜索,它将尽最大努力扼杀您的性能。一个UI很容易包含一千个元素,你需要一直比较string
。此外,你会通过偷偷访问你不告诉任何人你依赖的东西来谎报依赖关系。
调用findChild
的objectName
和对象可能不在代码的同一逻辑部分中,因此如果有人可能更改此对象或对象名称,并且您正在搜索不再存在的名称,则很容易损坏。
此外,如果您找到一个具有名称的对象 - 并且可能是正确的类型 - 仍然无法保证它是正确的对象,因为 objectNames 不一定是唯一的。
总而言之,这不是最好的设计,要访问这样的物体 - 这也许是可能的。
免责声明:我还没有尝试过我提出的解决方案,因为我不想浪费时间。