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
的视觉父级。您可以将子项移动到其他位置,然后删除容器。