QML:获取QObject父对象

6

QML引入了一个独立的所有权(QObject)树,与QtQuick场景图中的视觉树分开。

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

但是如何访问QObject父级呢?

顺便说一下,我打算动态创建和销毁包含自定义类型的嵌套布局,因此需要管理QObject树 - 仅使用视觉树将导致重新分配父对象然后删除后出现“错误”的对象丢失。

2个回答

2
如果您不知道该项的父级,我认为您无法找出它,除非进入C ++。如果您只想更改项的QObject父项,您应该可以通过将其添加到其新父项的data属性来实现QML中的更改。(如果适用,这也会更改其可视父项。)
引用Qt Quick Concepts文档:
任何分配给项目数据属性的对象都成为项目在其QObject层次结构内的子项,用于内存管理目的。此外,如果添加到数据属性的对象是项目类型,则还将其分配给Item :: children属性,并在可视场景层次结构内成为项目的子对象。 (Most Qt Quick hierarchy crawling algorithms, especially the rendering algorithms, only consider the visual parent hierarchy.)

0

您可以通过以下方式创建对象来避免不必要的先前父级所有权:

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

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


我知道这已经过时了,只是为了给下一个读者留下我自己需要找到的东西。 - really

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接