如何从javascript中的Qml中的objectName获取对象?

时间:2017-07-12 18:27:50

标签: qml qt5

如何使用findChild()在c ++中查找对象,但是来自javascript?

1 个答案:

答案 0 :(得分:1)

在QML方面,你通常无法访问Qt / C ++方面的父/子关系,但只能访问可视父/子关系,你需要求助于C ++。

你可以,例如创建一个对象,该对象公开一个带有QObject的方法和一个名称,并调用该对象的函数findChild

如果你只想找到一个可视子项,你可能只是在JS中的可视化树上实现一个递归bfs并调用它。

但正如我在评论中所说的:如果你需要这个,你可能会搞砸其他地方而应该考虑一种方法,而不是findChild()。在C ++中不建议使用它,在QML中肯定不是这样 由于它是递归搜索,它将尽力消除您的性能。 UI很容易包含一千个元素,您需要始终比较string。此外,你会偷偷地访问你不会告诉任何你依赖的人的东西。

objectName和调用findChild的对象可能不在代码的同一逻辑部分,因此很容易被破坏,如果有人可能更改此对象或objectName,那么搜索不再存在的名称。

此外,如果您发现一个具有名称的对象 - 可能是正确的类型 - 仍然无法保证,它是正确的对象,因为objectNames不一定是唯一的。

总而言之,访问这样的对象并不是最好的设计 - 很难实现。

  

免责声明:我没有尝试过我提出的解决方案,因为我不想浪费时间。