Skip to main content
Ir para o conteúdo

Linhas de páginas e pilhas de páginas

Adicione fluxo ao seu aplicativo: adicione, remova e substitua páginas de diferentes maneiras

Uma linha de páginas

Vimos até agora que um dos principais componentes de uma janela Kirigami é uma Kirigami.Page. Uma única página pode envolver toda a tela do aplicativo ou pode ser exibida junto com outras páginas ao mesmo tempo, se houver espaço.

Sempre que uma página é adicionada ou enviada, ela aparece à direita da(s) página(s) existente(s), formando uma linha. Essa linha de páginas pode ser gerenciada com o apropriadamente chamado Kirigami.PageRow.

Uma linha de página mínima com uma única página poderia ter esta aparência:

import QtQuick
import org.kde.kirigami as Kirigami

Kirigami.ApplicationWindow {
    title: "Single Page"
    width: 500
    height: 200

    Kirigami.PageRow {
        anchors.fill: parent

        Kirigami.Page {
            id: mainPage
            anchors.fill: parent
            Rectangle {
                anchors.fill: parent
                color: "lightblue"
            }
        }
    }
}
Uma única página com cor azul claro para mostrar as dimensões da página

Uma única página com cor azul claro para mostrar as dimensões da página

There are two improvements that can be done here. The first is that, with initialPage, we can both set mainPage to be the first page that appears in the page row, and have its dimensions be managed by the page row instead of via manual anchors, positioners or layouts. The second is to have a toolbar, which can be set by defining a toolbar style with globalToolBar.style. There are a few styles we can choose from, but we'll go with Kirigami.ApplicationHeaderStyle.Auto for now.

import QtQuick
import org.kde.kirigami as Kirigami

Kirigami.ApplicationWindow {
    title: "With globalToolBar and initialPage"
    width: 500
    height: 200
    Kirigami.PageRow {
        anchors.fill: parent
        globalToolBar.style: Kirigami.ApplicationHeaderStyle.Auto
        initialPage: Kirigami.Page {
            Rectangle {
                anchors.fill: parent
                color: "lightblue"
            }
        }
    }
}
Uma única página com barra de ferramentas e cor azul claro para mostrar as dimensões da página

Uma única página com barra de ferramentas e cor azul claro para mostrar as dimensões da página

There are only two ways of adding pages to a page row: by setting its initialPage (which can optionally take an array of pages) or by using push(). To delete a page from the page row, you should use pop(), whereas goBack() or goForward() can be used to navigate between pages.

import QtQuick
import QtQuick.Controls as Controls
import org.kde.kirigami as Kirigami

Kirigami.ApplicationWindow {
    title: "Multiple pages in a row"
    width: 700
    height: 300
    Kirigami.PageRow {
        id: mainRow
        anchors.fill: parent
        globalToolBar.style: Kirigami.ApplicationHeaderStyle.Auto
        initialPage: Kirigami.Page {
            id: firstPage
            Rectangle {
                anchors.fill: parent
                color: "lightblue"
                Controls.Button {
                    anchors.centerIn: parent
                    text: "Push!"
                    onClicked: mainRow.push(secondPage)
                }
            }
        }

        Component {
            id: secondPage
            Kirigami.Page {
                Rectangle {
                    anchors.fill: parent
                    color: "lightgreen"
                    Controls.Button {
                        anchors.centerIn: parent
                        text: "Pop!"
                        onClicked: mainRow.pop()
                    }
                }
            }
        }
    }
}
Página inicial com cor azul claro

Página inicial com cor azul claro

Ao clicar em "Push!", uma segunda página com cor verde claro aparece

Ao clicar em "Push!", uma segunda página com cor verde claro aparece

A pilha de páginas do aplicativo

If a Kirigami.PageRow with a toolbar looks familiar to you, that is because you have seen it before. An ApplicationWindow.pageStack is nothing more than a very convenient, global page row. Every function available to a PageRow is also available to the pageStack.

O exemplo anterior pode ser reduzido significativamente com um pageStack, com o bônus adicional de ações de navegação:

import QtQuick
import QtQuick.Controls as Controls
import org.kde.kirigami as Kirigami

Kirigami.ApplicationWindow {
    title: "Using the pageStack"
    width: 500
    height: 200
    pageStack.initialPage: Kirigami.Page {
            id: firstPage
            Rectangle {
                anchors.fill: parent
                color: "lightblue"
                Controls.Button {
                    anchors.centerIn: parent
                    text: "Push!"
                    onClicked: pageStack.push(secondPage)
                }
            }
        }
        Component {
            id: secondPage
            Kirigami.Page {
                Rectangle {
                    anchors.fill: parent
                    color: "lightgreen"
                    Controls.Button {
                        anchors.centerIn: parent
                        text: "Pop!"
                        onClicked: pageStack.pop()
                }
            }
        }
    }
}

Em geral, você vai querer usar um pageStack em vez de implementar seu próprio PageRow, especialmente quando seu aplicativo fica maior e você precisa que seus componentes fiquem em arquivos separados. Se você criar sua janela em Main.qml usando um Kirigami.ApplicationWindow, um componente que reside em outro arquivo ainda pode invocar diretamente o global pageStack por meio de uma chamada à função applicationWindow():

// "Main.qml"
import org.kde.kirigami as Kirigami

Kirigami.ApplicationWindow {
    title: "Pushing a Page from a different QML file"
    width: 700
    height: 400
    pageStack.initialPage: BasicPage {}
}

e

// "BasicPage.qml"
import QtQuick
import QtQuick.Controls as Controls
import org.kde.kirigami as Kirigami

Kirigami.Page {
    Controls.Button {
        anchors.centerIn: parent
        text: "This pushes page1 from BasicPage\ninto the pageStack from Main.qml!"
        onClicked: {
            applicationWindow().pageStack.push(page1)
        }
        Component {
            id: page1
            Kirigami.Page {
                Controls.Label {
                    anchors.centerIn: parent
                    text: "page1 was pushed!"
                }
            }
        }
    }
}
Clicar no botão abre uma nova página com a ajuda do applicationWindow

Clicar no botão abre uma nova página com a ajuda do applicationWindow