QML:获取 QObject 父级

Posted

技术标签:

【中文标题】QML:获取 QObject 父级【英文标题】:QML: Get QObject parent 【发布时间】:2013-10-19 22:09:15 【问题描述】:

QML 引入了与可视化树(QtQuick 场景图)分离的所有权 (QObject) 树。

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

但是如何访问QObject 父级?

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

【问题讨论】:

【参考方案1】:

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

引用the Qt Quick Concepts 文档:

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

【讨论】:

以上是关于QML:获取 QObject 父级的主要内容,如果未能解决你的问题,请参考以下文章

从 qml 编辑 QObject 属性

QML 未能检测到在 C++ 中破坏的 QObject

任何使用 QML 的非 QObject 类的机会

将 QObject 指针从 QML 对象传递给 C++

强制 QObject 作为 QWidget 的父级有啥后果?

QObject::findChild 返回 null,找不到跨 QML 对象