2
我有應用程序使用StackView並將大量動態創建的對象推入此StackView,並且我需要某種方式從StackView彈出時銷燬此對象。如果我使用的控件1 Stackview,我只能推的對象與destroyOnPop屬性(就像是在this question所示):QtQuick.Controls 2 StackView and destroyOnPop
tablesStack.push({item: view, destroyOnPop: true})
但它並不適用於控制2 StackView。這個問題的正確解決方案是什麼?
我只知道一種方式:當我彈出時調用object.destroy(),但這種方式看起來像kludge。如果它很重要,我可以將任何代碼添加到動態生成的對象中。
它與Qt.createComponent從文件,謝謝,但我不知道我應該怎麼改變我的代碼時我使用Qt.createQmlObject?我的測試代碼在這裏https://gist.github.com/anonymous/372c58e7f53531bd6e51950d611e33a7 – aknew
出於好奇,使用'Qt.createQmlObject()'的主要原因是什麼?避免硬依賴等是一個很好的竅門,但在大多數情況下,更明確的組件看起來更好。無論如何,使用Qt 5.8中的QtQuick Controls 2.1,你可以這樣做:'Rectangle {StackView.onDeactivated:destroy()}'。與2.0你大概不得不求助於檢查狀態:'Rectangle {StackView.onStatusChanged:if(StackView.status === StackView.Inactive)destroy()}' – jpnurmi
它的工作原理,謝謝。使用createQmlObject的原因非常簡單:我動態創建來自少數sqlite基礎的視圖,並且我不知道在運行時哪些字段將包含表。 Historicaly我經常在開始時更改表結構,這只是不忘記改變一些qml的方法。如果你對我的代碼感興趣,這裏是我的github https://github.com/aknew/CoinsVariationBase – aknew