StackView-弹出的屏幕在前一个屏幕可见后被破坏



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")
}
}

控制台输出:

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动画。这两个视图必须在默认的推送和弹出动画期间存在,因为它们同时出现在屏幕上。

您可能可以使用StackView附加的信号来解决您的问题:

https://doc.qt.io/qt-5/qml-qtquick-controls2-stackview.html#attached-信号

当StackView推送和弹出时,这些信号会在您的视图中引发关于其个人状态的信号。

如果你以前没有使用过附加信号,这里有一些关于它们如何工作的文档:

https://doc.qt.io/qt-5/qtqml-syntax-objectattributes.html#attached-属性和附加的信号处理程序

相关内容

最新更新