2016-12-06 85 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