1

我在 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()
}

这个想法是你从菜单中选择,你看电影。你从电影中选择,你会看到电影的细节。您选择查看演职员表,您会看到演员和工作人员的名单。所有这些都使用 aStackView并且工作得很好。后退按钮也可以正常工作,在您返回时一次弹出一个视图。

所以现在当我从 中选择一个特定的人时personListView,我想直接跳回moviesListView并且错过中间movieDetailView。这个想法是电影列表现在只显示包含所选人物的电影。

我知道在这种情况下我可以,任何人都应该只推另一个moviesListView- 但这个例子是为了描述一般问题。

为此,您可以调用该StackView pop()方法并提供您想要返回的“项目” - 所以我尝试了这个:

property Component personListView: PersonListView {
    onPersonSelected: {
        stackView.pop(moviesListView)
    }
    onBack: stackView.pop()
}

当它运行时,没有错误消息(所以我假设它知道这movieListView是存在的东西),但它会弹回到前一个视图,即movieDetailView. 它应该错过该视图并显示movieListView.

如果我尝试弹回mainMenuView,它仍然只是弹回前一个movieDetailView

这是否与我如何使用Component我的观点有关,如果是,我应该怎么做,还是有其他问题?

4

1 回答 1

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

于 2014-06-03T18:38:57.053 回答