如何使用 findChild()
在 C++ 中查找对象,但从 javascript 中查找对象?
最佳答案
在 QML 端,您通常无法访问 Qt/C++ 端的父/子关系,而只能访问可视的父/子关系,您需要求助于 C++。
例如,您可以创建一个对象,它公开一个方法,该方法接受一个 QObject
和一个名称,并调用该对象的函数 findChild
。
如果你只想找到一个视觉 child ,你可能只需要在 JS 中对视觉树实现一个递归 bfs 并调用它。
但正如我在评论中所说:如果您需要这个,您可能在其他地方搞砸了,应该考虑一种没有 findChild()
的方法。在 C++ 中不推荐使用它,在 QML 中肯定不是这样。
因为它是递归搜索,所以它会尽最大努力破坏你的表现。一个 UI 很容易包含一千个元素,您需要一直比较 string
。此外,您会通过偷偷访问您不告诉您所依赖的任何人的东西来谎报依赖关系。
objectName
和调用 findChild
的对象可能不在您代码的同一逻辑部分,因此如果有人可能更改此对象或objectName,而您正在搜索一个不再存在的名称。
此外,如果您发现一个对象具有名称 - 并且可能是正确的类型 - 仍然无法保证它是正确的对象,因为 objectNames 不一定是唯一的。
总而言之,访问这样的对象并不是最好的设计 - 很难做到。
Disclaimer: I have not tried out my proposed solution, as I don't want to waste my time on it.
关于qml - 如何从 javascript 在 Qml 中通过 objectName 获取对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45065113/