如何根据以下样本正确切换页面:
import QtQuick 2.6
import QtQuick.Layouts 1.0
import Qt.labs.controls 1.0
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
StackView {
id: stack
anchors.fill: parent
initialItem: hal1
}
Pane {
id: hal1
anchors.fill: parent
background: Rectangle {
id: mystart
anchors.centerIn: parent
color: "#2196F3"
}
}
Pane {
id: hal2
anchors.fill: parent
Label {
text: qsTr("Second page")
anchors.centerIn: parent
}
}
footer: TabBar {
id: tabBar
currentIndex: 0
TabButton {
text: qsTr("First")
onClicked: {
if(stack.currentItem==hal1){
console.log("dont switch hal1 !")
return
}
stack.replace(hal1)
}
}
TabButton {
text: qsTr("Second")
onClicked: {
if(stack.currentItem==hal2){
console.log("dont switch hal2 !!")
return
}
stack.replace(hal2)
}
}
}
}
每当点击第一个标签我想要得到矩形和第二个标签我想得到我的简单标签。 我使用qt labs controls 5.6谢谢
编辑: 看起来这个代码仅适用于调试版本而不适用于发布版本。在msvc2015窗口上测试过。我不知道为什么会发生这种情况,有什么指针?
好的,我附上了另一个示例项目here,以使此案例更加清晰。这里有两个问题,第一件事是我收到警告信息" StackView取代任何东西来推动"调试和发布版本之间的不一致行为。调试版本工作正常,我在发布版本中得到了意想不到的结果。
答案 0 :(得分:1)
虽然我的问题不明确,但由于评论太有限,我会尝试回答问题,以解决代码中的许多问题。
首先进行编辑:
编辑:看起来这段代码仅适用于调试版本,不适用于版本构建。在msvc2015窗口上测试过。我不知道为什么会发生这种情况,有什么指针?
因此,您的两个构建设置之间需要有一些实质性的区别。 检查差异,尤其是在构建目录中。任何挥之不去的文件,不应该是旧版本中的那些? 一切都正确汇编了吗?
然后到你的分层:
然后你有initialItem
设置,将hal1
转让给StackView
hal2
保持在最前面,直到您在StackView
中显示一次,因此您应该首先看到hal2
。
然后你对内存消耗的误解:
StackView
不会最小化内存消耗。
当您在StackView
上推送某些内容时,它仅被重新定位,并设置为可见。弹出它时,它会被重新设置为原始父级,并且变为不可见。要验证我的声明,请记录Component.onCompleted
和Component.onDestruction
。第一个发生在启动时,后者发生在关闭应用程序时,而不是在页面被推送或弹出时。因此,内存消耗不断高。防止这种情况的唯一方法是动态创建它们
编辑正如 BaCaRoZzo 指出的那样,为了在使用StackView
时保持低内存这一点非常重要。它可以完成,例如,传递Component
而不是静态创建的Item
。在这种情况下,StackView
负责创建,一旦弹出堆栈,对象就会被销毁。
folibis 提到的SwipeView
使事情变得更容易一些。由于其default property的类型为Component
,因此您编写的所有内容SwipeView { ... here ...}
都不会立即实例化,而是存储为仅在需要时实例化的Component。这是在显示时,或者可能很快显示(currentItem的左侧或右侧)。所以我们可以看到,从内存消耗的角度来看,两个...View
都可以有效地使用。但是,使用方式具有不同的风格,SwipeView
和StackView
的语义不同。通常SwipeView
看起来更自然,当多个页面并行时StackView
是要走的路,当你明确表达它的名字时: stack项目
在谈论要走的路时:为什么选择Qt.labs.controls
而不是QtQuick.Controls 2.0
?与labs
- 版本相比,它们往往更稳定,并且其他版本的行为应该不太可能发生变化。
现在,我希望我能为你提供帮助,即使我可能未能解决你的问题,因为你还没有在你的问题中说明这一点。