Qml 弹出到QtQuick StackView中的特定项目
我在Android上使用Qt 5.2.1,我有一个主应用程序窗口,代码如下(示例有点做作,但它准确地说明了我在做什么): 你可以从菜单中选择,然后看电影。你从电影中选择,你就会看到电影的细节。你选择查看演员名单,你会看到演员名单和剧组名单。所有这些都使用了一个Qml 弹出到QtQuick StackView中的特定项目,qml,qt5,qtquick2,qt5.2,qtquickcontrols,Qml,Qt5,Qtquick2,Qt5.2,Qtquickcontrols,我在Android上使用Qt 5.2.1,我有一个主应用程序窗口,代码如下(示例有点做作,但它准确地说明了我在做什么): 你可以从菜单中选择,然后看电影。你从电影中选择,你就会看到电影的细节。你选择查看演员名单,你会看到演员名单和剧组名单。所有这些都使用了一个StackView,工作正常。“后退”按钮也可以正常工作,在返回时一次弹出一个视图 因此,现在当我从personListView中选择一个特定的人时,我想直接跳回到moviesListView,而忽略中间的movieDetailView。其
StackView
,工作正常。“后退”按钮也可以正常工作,在返回时一次弹出一个视图
因此,现在当我从personListView
中选择一个特定的人时,我想直接跳回到moviesListView
,而忽略中间的movieDetailView
。其思想是,电影列表现在只显示包含选定人物的电影
我知道,在这种情况下,我可以,也许应该,只推另一个moviesListView
——但这个例子是为了描述一般问题而设计的
为此,您可以调用StackView
pop()
方法并提供要返回的“项”-因此我尝试了以下方法:
property Component personListView: PersonListView {
onPersonSelected: {
stackView.pop(moviesListView)
}
onBack: stackView.pop()
}
当它运行时,没有错误消息(因此我假设它知道movieListView
是存在的),但它会弹出到上一个视图,即movieDetailView
。它应该忽略该视图并显示movieListView
如果我尝试弹回main菜单视图
,它仍然会弹回上一个movieDetailView
这是否与我在视图中使用组件的方式有关?如果是,我该怎么办?还是有其他问题?看起来像个bug。我可以用这个例子重现它:
import QtQuick 2.2
import QtQuick.Controls 1.1
Rectangle {
property Component mainMenuView: Button {
text: "mainMenuView"
onClicked: {
Stack.view.push(moviesListView)
}
}
property Component moviesListView: Button {
text: "moviesListView"
onClicked: {
Stack.view.push(movieDetailView)
}
}
property Component movieDetailView: Button {
text: "movieDetailView"
onClicked: {
Stack.view.push(personListView)
}
}
property Component personListView: Button {
text: "personListView"
onClicked: {
// Wrong: goes to movieDetailView.
Stack.view.pop(moviesListView)
// Wrong: goes to mainMenuView.
// Stack.view.pop({item: moviesListView})
}
}
StackView {
initialItem: mainMenuView
}
}
我已经为此创造了
import QtQuick 2.2
import QtQuick.Controls 1.1
Rectangle {
property Component mainMenuView: Button {
text: "mainMenuView"
onClicked: {
Stack.view.push(moviesListView)
}
}
property Component moviesListView: Button {
text: "moviesListView"
onClicked: {
Stack.view.push(movieDetailView)
}
}
property Component movieDetailView: Button {
text: "movieDetailView"
onClicked: {
Stack.view.push(personListView)
}
}
property Component personListView: Button {
text: "personListView"
onClicked: {
// Wrong: goes to movieDetailView.
Stack.view.pop(moviesListView)
// Wrong: goes to mainMenuView.
// Stack.view.pop({item: moviesListView})
}
}
StackView {
initialItem: mainMenuView
}
}