2016-12-06 90 views
0

在我的应用程序中,我有一个正常的QML树,在根元素下面有几个子节点。应用程序需要某些子树有时可见,其他时候需要其他子树。我尝试过的一种方法是将setParentItem设置为null,以使我想要隐藏的子树(以避免激发visibleChange事件),为未来与根元素的连接保存ptr引用。我遇到的问题是Qt的垃圾回收器然后启动并释放子树中的所有节点。防止Qt垃圾收集QML元素

这可以以某种方式避免吗?

回答

1

没有父母的对象和引用他们作为收集的候选人。最重要的是,QML垃圾回收是actually broken。您可以通过将C++的所有权重写为described here来完全禁用对象的QML垃圾回收。

根据您的实际使用情况,可能有更多方法可以解决此问题,例如StackView

+0

不幸的是,切换可见标志触发onVisibleChange事件,我不想。将检查我是否可以明天禁用。谢谢 – Johan

+0

@Johan - 您可以尝试将不透明度设置为0以隐藏并启用false以禁用输入。 – dtech

+0

这是我目前的做法,它工作正常。但似乎清理整个树更清洁(并且比递归设置不透明度快)。我认为您提出的其他解决方案对我而言并不合适,因为它需要重写过多,这是一个庞大的代码库,但它是一个很好的解决方案,我将为未来的应用程序考虑这一点 – Johan