[英]StackView - Popped screen gets destroyed after previous screen is made visible
StackView 將屏幕 1 作為初始項目。 屏幕 2 被按下。 屏幕 2 現在彈出。
屏幕 1 可見后屏幕 2 被破壞。
這是預期的行為嗎? 為什么它會這樣工作?
我希望在前一個屏幕可見之前彈出的屏幕會被破壞。
演示相同的代碼:
StackView {
id: stack
initialItem: mainView1
anchors.fill: parent
}
Component {
id: mainView1
Text {
text: "1"
onVisibleChanged: console.log(text, visible)
Component.onCompleted: console.log(text, "completed")
Component.onDestruction: console.log(text, "destroyed")
}
}
Component {
id: mainView2
Text {
text: "2"
onVisibleChanged: console.log(text, visible)
Component.onCompleted: console.log(text, "completed")
Component.onDestruction: console.log(text, "destroyed")
}
}
控制台 output:
qml: 1 completed
qml: Push
qml: 2 completed
qml: 1 false
qml: Pop
qml: 1 true
qml: 2 false
qml: 2 destroyed
問題背后的動機:
我需要從 QML 控制一個 C++ 定時器。 計時器需要在小部件創建/可見時啟動,並在小部件被銷毀/隱藏時停止。
StackView 的上述行為阻止了我實現它。
當我彈出屏幕 2 時,屏幕 1 首先是可見的,所以我的計時器開始了。 然后屏幕 2 被破壞,結果,我的計時器停止了。
出現這種情況的原因是由於 StackView animation。 在默認推送和彈出動畫期間,這兩個視圖都必須存在,因為它們都同時出現在屏幕上。
您可能可以使用 StackView 附加信號解決您的問題:
https://doc.qt.io/qt-5/qml-qtquick-controls2-stackview.html#attached-signals
當 StackView 推送和彈出時,這些信號會在您的視圖上觸發有關其個人狀態的信號。
如果您以前沒有使用過附加信號,這里有一些關於它們如何工作的文檔:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.