我在Android上使用Qt 5.2.1,我有一个主应用程序窗口,代码如下(示例有点人为,但它准确地说明了我在做什么):
property Component mainMenuView: MainMenuView {
onMoviesSelected: {
stackView.push(moviesListView)
}
onSettingsSeleted: { }
onAboutSeleted: { }
}
property Component moviesListView: MovieListView {
onMovieSelected: {
stackView.push(movieDetailView)
}
onBack: stackView.pop()
}
property Component movieDetailView: MovieDetailView {
onCreditsSelected: {
stackView.push(personListView)
}
onBack: stackView.pop()
}
property Component personListView: PersonListView {
onPersonSelected: {
// Pending...
}
onBack: stackView.pop()
}
这个想法是你从菜单中选择,你看电影。您可以从电影中选择电影细节。您选择查看积分,您会看到演员和工作人员的列表。所有这些都使用StackView
并且工作得很好。后退按钮也可正常工作,当你回去时,一次一个地弹出视图。
所以现在当我从personListView
中选择一个特定的人时,我想直接跳到moviesListView
并错过中间movieDetailView
。我们的想法是,电影列表现在只显示包含所选人员的电影。
我知道我可以,任何可能应该,只是在这种情况下推送另一个moviesListView
- 但这个例子是用来描述一般性问题的。
为此,您可以调用StackView
pop()
方法并提供您想要返回的“项目” - 所以我尝试了这个:
property Component personListView: PersonListView {
onPersonSelected: {
stackView.pop(moviesListView)
}
onBack: stackView.pop()
}
当它运行时,没有错误消息(因此我假设它知道movieListView
是存在的东西)但它会弹回到前一个视图,即movieDetailView
。它应该错过该视图并显示movieListView
。
如果我尝试回弹mainMenuView
,它仍会弹回到之前的movieDetailView
。
这在某种程度上与我如何使用Component
查看我的观点有关,如果是这样,我该怎么办,或者是其他错误?
答案 0 :(得分:1)
看起来像个错误。我可以用这个例子重现它:
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
}
}
我为此创建了QTBUG-39423。