QML:获取 QObject 父级



QML引入了一个独立于可视化树(QtQuick场景图)的所有权(QObject)树。

  • parent返回视觉父级。
  • children返回可视子项。
  • data返回QObject子项。

但是,如何访问QObject父级?

仅供参考,我打算动态创建和销毁包含自定义类型的嵌套布局,因此我需要管理QObject树 - 仅使用可视化树会导致"错误"对象在重定父级然后删除后消失。

如果您实际上不知道该项目的父项,我认为如果不进入C++,您将无法找到答案。如果您只想更改项目的QObject父项,您应该能够在 QML 中通过将它添加到其新父项的 data 属性来执行此操作。(如果适用,这也将更改其可视父级。

引用Qt快速概念文档:

出于内存管理目的,分配给项的数据属性的任何对象都将成为其 QObject 层次结构中项的子项。此外,如果添加到 data 属性的对象属于 Item 类型,则该对象也会分配给 Item::children 属性,并成为视觉场景层次结构中该项的子项。(大多数Qt Quick层次结构爬网算法,尤其是渲染算法,仅考虑视觉父层次结构。

您可以通过像这样创建对象来避免以前的父级对对象的不必要所有权:

const someObject = someComponent.createObject( null, { parent: someItem });

这样someItem只是someObject的视觉父级。您可以将子项移动到其他位置,然后删除容器。

相关内容

  • 没有找到相关文章

最新更新