簡體   English   中英

StackView - 前一個屏幕可見后彈出的屏幕被破壞

[英]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 推送和彈出時,這些信號會在您的視圖上觸發有關其個人狀態的信號。

如果您以前沒有使用過附加信號,這里有一些關於它們如何工作的文檔:

https://doc.qt.io/qt-5/qtqml-syntax-objectattributes.html#attached-properties-and-attached-signal-handlers

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM