弹出到QtQuick StackView中的特定项目

时间:2014-04-16 09:18:09

标签: qml qt5 qtquick2 qt5.2 qtquickcontrols

我在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查看我的观点有关,如果是这样,我该怎么办,或者是其他错误?

1 个答案:

答案 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