Qml 弹出到QtQuick StackView中的特定项目

Qml 弹出到QtQuick StackView中的特定项目,qml,qt5,qtquick2,qt5.2,qtquickcontrols,Qml,Qt5,Qtquick2,Qt5.2,Qtquickcontrols,我在Android上使用Qt 5.2.1,我有一个主应用程序窗口,代码如下(示例有点做作,但它准确地说明了我在做什么): 你可以从菜单中选择,然后看电影。你从电影中选择,你就会看到电影的细节。你选择查看演员名单,你会看到演员名单和剧组名单。所有这些都使用了一个StackView,工作正常。“后退”按钮也可以正常工作,在返回时一次弹出一个视图 因此,现在当我从personListView中选择一个特定的人时,我想直接跳回到moviesListView,而忽略中间的movieDetailView。其

我在Android上使用Qt 5.2.1,我有一个主应用程序窗口,代码如下(示例有点做作,但它准确地说明了我在做什么):

你可以从菜单中选择,然后看电影。你从电影中选择,你就会看到电影的细节。你选择查看演员名单,你会看到演员名单和剧组名单。所有这些都使用了一个
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
    }
}