qml - 如何从 javascript 在 Qml 中通过 objectName 获取对象?

标签 qml qt5

如何使用 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/

相关文章:

c++ - 对象组

javascript - arcTo 有时不会在调整大小时绘制

javascript - 将 XmlHttpRequest 解析为 XmlListModel

qt - 如何在 QML 中隐藏菜单项

qt - 无法在设计器模式下编辑 QML 文件

javascript - 自定义 C++ 类型为 QJSEngine : member function return value is always QVariant

qt - 使用原始 OpenGL 调用绘制 Qml 项的问题

c++ - 我在 QChartView 中找不到缩放图形的鼠标滚轮滚动事件

ubuntu - 使用 Qt4 或 Qt5 编译的环境变量?

c++ - 将不同类型的对象存储在一个容器中