qml 導航欄TabBar 工具欄ToolBar

-兮發表於2020-11-22

導航欄 TabBar

  • 提供基於選項卡的導航模型,允許使用者在不同的檢視或子任務之間切換。用TabButton控制元件填充,可以理解為button按鈕控制元件。一般會與佈局或容器控制元件一起使用
  • 屬性
    contentHeight : 儲存內容的高度。它用於計算導航欄的總隱式高度
    contentWidth : 儲存內容的寬度。它用於計算導航欄的總隱式寬度
    position : 儲存導航欄的位置
  • 附加屬性
    TabBar.index:[只讀],儲存TabBar中每個導航欄按鈕的索引
    TabBar.position:[只讀],保留導航欄的位置
    TabBar.tabBar:[只讀],包含管理此選項卡按鈕的選項卡欄

與佈局管理器使用

在這裡插入圖片描述

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12

Window {
    id: root
    visible: true
    width: 640
    height: 480
    title: qsTr("test")
    color:"lightgray"

    TabBar {    //點選相應的按鈕實現切換
        id: bar
        width: parent.width
        TabButton {
            text: qsTr("First")
        }
        TabButton {
            text: qsTr("Second")
        }
        TabButton {
            text: qsTr("Third")
        }
    }

    StackLayout {   //棧佈局管理器
        anchors.centerIn: parent
        width: parent.width
        currentIndex: bar.currentIndex  //當前檢視的索引
        Item {
            Text {
                anchors.centerIn: parent
                text: qsTr("First")
            }
        }
        Item {
            Text {
                anchors.centerIn: parent
                text: qsTr("Second")
            }
        }
        Item {
            Text {
                anchors.centerIn: parent
                text: qsTr("Third")
            }
        }
    }
}

與容器控制元件 SwipeView 結合使用

  • 滑動SwipeView時,當前索引currentIndex改變,使得滑動頁面可以和標題欄的選擇一致
    在這裡插入圖片描述
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    SwipeView {
            id: view
            currentIndex: 0
            anchors.fill: parent
            orientation: Qt.Horizontal
            interactive: true

            Rectangle {
                id: firstPage
                color: "purple"
                Text {
                    text: qsTr("First")
                    anchors.centerIn: parent
                    font.pixelSize: 25
                }
            }
            Rectangle {
                id: secondPage
                color: "blue"
                Text {
                    text: qsTr("Second")
                    anchors.centerIn: parent
                    font.pixelSize: 25
                }
            }
            Rectangle {
                id: thirdPage
                color: "green"
                Text {
                    text: qsTr("Third")
                    anchors.centerIn: parent
                    font.pixelSize: 25
                }
            }
        }

    header: TabBar { //視窗標題 是 ApplicationWindow 的屬性
        id: headertabBar;
        currentIndex:view.currentIndex
        TabButton {
            text: qsTr("header one");
        }
        TabButton {
            text: qsTr("header two")
        }
        TabButton {
            text: qsTr("header three")
        }
    }
}

工具欄 ToolBar

  • 用於程式的上下文控制,例如導航按鈕和搜尋按鈕
  • 屬性只有一個
    position:儲存工具欄的位置

在這裡插入圖片描述

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("ToolBar")
    color: "lightgray"

    header: ToolBar {   //視窗標題欄設定ToolBar
        RowLayout {
            anchors.fill: parent
            ToolButton {    //此按鈕是關聯上下文
                text: qsTr("‹") //回退按鈕
                onClicked: stack.pop()
            }
            Label {
                text: "Two" //標題名
                horizontalAlignment: Qt.AlignHCenter
                verticalAlignment: Qt.AlignVCenter
                Layout.fillWidth: true
            }
            ToolButton {
                id: fileButton;
                text: qsTr("⋮") //選單隱藏按鈕
                onClicked: menu.open()
            }
        }
    }
    Menu {
        id: menu
        x: fileButton.x;
        y: fileButton.y;
        Action { text: "Cut" }
        Action { text: "Copy" }
        Action { text: "Paste" }
    }

    StackView {
        id: stack
        anchors.fill: parent
    }
}

相關文章