当前位置: 首页 > news >正文

04. 布局管理

一、什么是布局

  在 Qt Quick 中有两套与元素布局相关的类库,一套叫作 Item Positioner定位器),一套叫作 Item Layout布局)。其实在 Qt Quick 中还有一个 锚布局,它通过 Itemanchors 属性实现,是 Qt Quick 中非常灵活的一种布局方式。

  我们可以在终端中使用 pip 安装 PySide6 模块。默认是从国外的主站上下载,因此,我们可能会遇到网络不好的情况导致下载失败。我们可以在 pip 指令后通过 -i 指定国内镜像源下载

pip install pygame -i https://mirrors.aliyun.com/pypi/simple

  国内常用的 pip 下载源列表:

  • 阿里云 https://mirrors.aliyun.com/pypi/simple
  • 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple
  • 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple
  • 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple

二、锚布局

  在 QML 中,锚点(anchors)是一种用于定义元素之间相对位置和大小关系的机制。锚点允许你指定一个元素相对于其父元素或其他元素的位置和尺寸。通过使用锚点,你可以创建响应式布局,使 QML 界面能够根据不同屏幕尺寸和分辨率进行自适应调整。

  QML 中的每个元素都有一个隐式的锚点系统,你可以通过 anchors 属性来访问它。anchors 属性提供了多个属性来设置锚点的位置。

  每个 Item 都有 7 条不可见的锚线:(top)、(bottom)、(left)、(right)、水平中心(horizontalCenter)、垂直中心(verticalCenter)和 基线(baseline)。

锚线

anchors.top                                                                     // 将元素的顶部边缘锚定到某个参考点的顶部边缘
anchors.bottom                                                                  // 将元素的底部边缘锚定到某个参考点的底部边缘
anchors.left                                                                    // 将元素的左边缘锚定到某个参考点的左边缘
anchors.right                                                                   // 将元素的右边缘锚定到某个参考点的右边缘anchors.horizontalCenter                                                        // 将元素的水平中心锚定到某个参考点的水平中心
anchors.verticalCenter                                                          // 将元素的垂直中心锚定到某个参考点的垂直中心anchors.fill                                                                    // 使元素填充其父元素或参考元素的整个区域

baseline 是指文本所在的线,如果 Item 没有文字,则 baseline 就和 top 的位置相同。

  我们还可以使用 margins 属性设置四个边的边距。

边距

anchors.margins                                                                 // 设置元素与其锚点之间的外边距
anchors.leftMargin                                                              // 设置元素与其锚点之间的左边距
anchors.rightMargin                                                             // 设置元素与其锚点之间的右边距
anchors.topMargin                                                               // 设置元素与其锚点之间的顶边距
anchors.bottomMargin                                                            // 设置元素与其锚点之间的底边距

  我们新建一个 template.py 文件。

import sysfrom PySide6.QtWidgets import QApplication
from PySide6.QtQml import QQmlApplicationEngineif __name__ == "__main__":app = QApplication(sys.argv)                                                # 1.创建一个QApplication类的实例engine = QQmlApplicationEngine()                                            # 2.创建QML引擎对象engine.load("template.qml")                                                 # 3.加载QML文件sys.exit(app.exec())                                                        # 4.进入程序的主循环并通过exit()函数确保主循环安全结束

  我们新建一个 template.qml 文件。

import QtQuick.Window// Window控件表示一个顶级窗口
// 在QML中,元素是通过大括号{}内的属性来配置的。
Window {width: 800                                                                  // 窗口的宽度height: 600                                                                 // 窗口的高度visible: true                                                               // 显示窗口color: "lightgray"                                                          // 窗口的背景颜色// 定义一个文本(Text)元素Text {id: titleTextId                                                         // 定义一个标识text: "Custom Layout Example"                                           // 设置文本元素的内容font.pointSize: 24                                                      // 设置文本的字体大小color: "#FFCCCC"                                                        // 设置字体颜色// 使用锚点(anchors)系统来定位文本元素anchors.top: parent.top                                                 // 将顶部的锚点定位到父元素的顶部anchors.topMargin: 20                                                   // 设置顶部边距为20像素anchors.horizontalCenter: parent.horizontalCenter                       // 水平居中}// 定义一个文本(Text)元素Text {text: "This is an exmaple of using anchors for layout."                 // 设置文本元素的内容font.pointSize: 18                                                      // 设置文本的字体大小color: "#FF99CC"                                                        // 设置字体颜色// 使用锚点(anchors)系统来定位文本元素anchors.top: titleTextId.bottom                                         // 将顶部的锚点定位到指定控件父的底部anchors.topMargin: 20                                                   // 设置顶部边距为20像素anchors.horizontalCenter: parent.horizontalCenter                       // 水平居中}// 定义一个Item元素Item {width: 300                                                              // 宽度height: 300                                                             // 高度// 使用锚点(anchors)系统来定位文本元素,这里中心的锚点定位到其父元素的中心anchors.centerIn: parentRectangle {color: "#FF6666"                                                    // 设置矩形颜色anchors.fill: parent                                                // 填充父容器对象Text {text: "Hello Sakura!"font.pointSize: 18color: "#FFFFFF"anchors.top: parent.top                                         // 将顶部的锚点定位到指定控件父的顶部anchors.topMargin: 10                                           // 设置顶部边距为10像素anchors.horizontalCenter: parent.horizontalCenter               // 水平居中}}}// 定义一个矩形元素Rectangle {width: 100                                                              // 宽度height: 50                                                              // 高度color: "#99CCFF"                                                        // 设置矩形颜色// 使用锚点(anchors)系统来定位文本元素anchors.left: parent.left                                               // 将左侧的锚点定位到父元素的左侧anchors.leftMargin: 20                                                  // 设置左侧边距为20像素anchors.bottom: parent.bottom                                           // 将底部的锚点定位到父元素的底部anchors.bottomMargin: 20                                                // 设置底部边距为20像素}// 定义一个矩形元素Rectangle {width: 100                                                              // 宽度height: 50                                                              // 高度color: "#CCCCFF"                                                        // 设置矩形颜色anchors.right: parent.right                                             // 将右侧的锚点定位到父元素的右侧anchors.rightMargin: 20                                                 // 设置右侧边距为20像素anchors.bottom: parent.bottom                                           // 将底部的锚点定位到父元素的底部anchors.bottomMargin: 20                                                // 设置底部边距为20像素}
}

当你使用锚点时,请确保你指定的参考点(如父元素或其他元素)是有效的,并且它们在布局中是可见的。

锚点系统是基于父元素或参考元素的坐标系统来工作的,因此如果父元素或参考元素的大小或位置发生变化,依赖于它们的子元素也会相应地发生变化。

在使用锚点时,要注意避免循环依赖或相互冲突的锚点设置,这可能会导致布局问题或不可预测的行为。

三、定位器

  定位器 是一种 容器元素,专门用来管理界面中的其它元素。如果定位器中的子项目不可见(visiblefalse)、宽度或者高度为0,那么该子项目不会显示,也不会被布局。定位器可以自动布局其子项目,也就是说,其子项目不再需要显式设置 xy等属性或使用锚 anchors 进行布局。

  定位器 不会改变它管理的元素的大小,即便用户调整了界面尺寸,它也坚持不干涉孩子们的尺寸,这可能与你的期望不同,不过如果你希望使用“自动根据界面尺寸变化调整孩子们的尺寸”这种特性,可以使用 Qt Quick 中的 布局管理器

  定位器 包括 Row行定位器)、Column列定位器)、Grid栅格定位器)、Flow流式定位器)。

3.1、行定位器

  Row 沿着一行安置它的孩子们。一旦你把一个 Item 交给 Row 来管理,那就不要再使用 Itemxyanchors 等属性了。在一个 Row 内的 Item,可以使用 Positioner 附加属性来获知自己在 Row 中的详细位置信息。PositionerindexisFirstItemisLastItem 三个属性。

  Row 有一个 spacing 属性,用来指定它管理的 Item 之间的 间隔。还有一个 layoutDirection 属性,可以指定 布局方向,取值为 Qt.LeftToRight从左到右 放置 Item,这是默认行为,取值为 Qt.RightToLeft从右向左 放置 Item

  Row 还有 addmovepopulate 三个 Transition 类型的属性,分别指定应用于 Item 添加Item 移动定位器初始化创建Items 三种场景的过渡动画。

  修改 template.qml 文件的内容。

import QtQuick.Window// Window控件表示一个顶级窗口
// 在QML中,元素是通过大括号{}内的属性来配置的。
Window {width: 800                                                                  // 窗口的宽度height: 600                                                                 // 窗口的高度visible: true                                                               // 显示窗口color: "lightgray"                                                          // 窗口的背景颜色// 定义一个Row,用于水平布局Row {anchors.centerIn: parent                                                // 将中心的锚点定位到父元素的中心spacing: 100                                                            // 用于设置子元素之间的间隔layoutDirection: Qt.RightToLeft                                         // 设置布局的显示方向为从右到左Rectangle {width : 100                                                         // 宽度height: 100                                                         // 高度color: "#CCCCFF"                                                    // 设置矩形颜色}Rectangle {width : 100                                                         // 宽度height: 50                                                          // 高度color: "#99CCFF"                                                    // 设置矩形颜色}Rectangle {width : 100                                                         // 宽度height: 100                                                         // 高度color: "#FF6666"                                                    // 设置矩形颜色}}
}

行定位器

Row 本身也是一个Item,可以使用 anchors 布局来决定它在父 Item 中的位置。

如果 Row 中的 Item 不是 visible,或者其宽度或高度为 0,则该项目将不会布局,在行中也不可见。

3.2、列定位器

  ColumnRow 类似,不过是在垂直方向上安排它的子ItemColumnspacing 属性描述子 Item 之间的间隔。

  修改 template.qml 文件的内容。

import QtQuick.Window// Window控件表示一个顶级窗口
// 在QML中,元素是通过大括号{}内的属性来配置的。
Window {width: 800                                                                  // 窗口的宽度height: 600                                                                 // 窗口的高度visible: true                                                               // 显示窗口color: "lightgray"                                                          // 窗口的背景颜色// 定义一个Column,用于垂直布局Column {anchors.centerIn: parent                                                // 将中心的锚点定位到父元素的中心spacing: 100                                                            // 用于设置子元素之间的间隔Rectangle {width : 100                                                         // 宽度height: 100                                                         // 高度color: "#CCCCFF"                                                    // 设置矩形颜色}Rectangle {width : 50                                                          // 宽度height: 50                                                          // 高度color: "#99CCFF"                                                    // 设置矩形颜色}Rectangle {width : 100                                                         // 宽度height: 100                                                         // 高度color: "#FF6666"                                                    // 设置矩形颜色}}
}

列定位器

3.3、栅格定位器

  Grid 在一个网格上安置它的子 Item,它会创建一个拥有很多单元格的网格,足够容纳它的所有子 ItemGrid 会从左到右、从上到下把它的子 Item 一个个塞到单元格里。Item 默认会被放在一个单元格左上角,即 (0, 0) 位置。

  我们可以通过 Gridrowscolumns 属性 指定表格的行、列数。如果不设置,默认只有 4 列,而行数则会根据实际的 Item 数量自动计算。rowSpacingcolumnSpacing 属性用来 指定行、列间距,单位是像素。

  Gridflow 属性 描述表格的流模式Grid.LeftToRight 是默认值,这种流模式 从左到右 一个挨一个放置 Item,一行放满再放下一行。flow 取值为 Grid.TopToBottom 时,从上到下 一个挨一个放置 Item,一列放满再放下一列。

  GridhorizontalItemAlignmentverticalItemAlignment 属性用来 指定单元格对齐方式。默认的单元格对齐方式和 layoutDirection 以及 flow 有关。

  • horizontalItemAlignment 的有效值是 Grid.AlignLeftGrid.AlignRightGrid.AlignHCenter
  • verticalItemAlignment 的有效值是 Grid.AlignTopGrid.AlignBottomGrid.AlignVCenter

  修改 template.qml 文件的内容。

import QtQuick.Window// Window控件表示一个顶级窗口
// 在QML中,元素是通过大括号{}内的属性来配置的。
Window {width: 800                                                                  // 窗口的宽度height: 600                                                                 // 窗口的高度visible: true                                                               // 显示窗口color: "lightgray"                                                          // 窗口的背景颜色// 定义一个GridLayout,用于网格布局Grid {anchors.centerIn: parent                                                // 将中心的锚点定位到父元素的中心rows: 3                                                                 // 设置行数columns: 3                                                              // 设置列数rowSpacing: 10                                                          // 设置行间距columnSpacing: 10                                                       // 设置列间距horizontalItemAlignment: Grid.AlignHCenter                              // 设置水平对齐方式verticalItemAlignment: Grid.AlignVCenter                                // 设置垂直对齐方式Rectangle {width : 100                                                         // 宽度height: 100                                                         // 高度color: "#FF6666"                                                    // 设置矩形颜色}Rectangle {width : 100                                                         // 宽度height: 100                                                         // 高度color: "#FF6666"                                                    // 设置矩形颜色}Rectangle {width : 100                                                         // 宽度height: 100                                                         // 高度color: "#FF6666"                                                    // 设置矩形颜色}Rectangle {width : 100                                                         // 宽度height: 100                                                         // 高度color: "#99CCFF"                                                    // 设置矩形颜色}Rectangle {width : 50                                                          // 宽度height: 50                                                          // 高度color: "#99CCFF"                                                    // 设置矩形颜色}Rectangle {width : 100                                                         // 宽度height: 100                                                         // 高度color: "#99CCFF"                                                    // 设置矩形颜色}Rectangle {width : 100                                                         // 宽度height: 100                                                         // 高度color: "#CCCCFF"                                                    // 设置矩形颜色}Rectangle {width : 100                                                         // 宽度height: 100                                                         // 高度color: "#CCCCFF"                                                    // 设置矩形颜色}Rectangle {width : 100                                                         // 宽度height: 100                                                         // 高度color: "#CCCCFF"                                                    // 设置矩形颜色}}
}

栅格定位器

3.4、流式定位器

  在 QML 中,Flow 是一种非常灵活的布局方式,它允许元素根据容器的尺寸和元素的尺寸自动进行排列,类似于文本排版中的 “流” 概念,元素会按照指定的方向(通常是水平或垂直)依次排列,当一行或一列无法容纳更多元素时,会自动换行或换列。

  Flowflow 属性,默认取值 Flow.LeftToRight从左到右 安排 Item,直到 Flow 本身的宽度不能容纳新的子 Item 时折行。当 flow 取值 Flow.TopToBottom 时,从上到下 安排 Item,直到 Flow 本身的高度不能容纳新的子 Item 时开始在下一列上安排 Item。在 QML 中,我们还可以通过 spacing 属性来 设置元素之间的间距

  修改 template.qml 文件的内容。

import QtQuick.Window// Window控件表示一个顶级窗口
// 在QML中,元素是通过大括号{}内的属性来配置的。
Window {width: 800                                                                  // 窗口的宽度height: 600                                                                 // 窗口的高度visible: true                                                               // 显示窗口color: "lightgray"                                                          // 窗口的背景颜色// 定义一个Flow,用于流式布局Flow {width: parent.width                                                     // 宽度height: parent.height                                                   // 高度 anchors.centerIn: parent                                                // 将中心的锚点定位到父元素的spacing: 100                                                            // 用于设置子元素之间的间隔// Repeater是一个用于根据模型(通常是列表或数组)动态生成一组子元素的有用工具Repeater{// 定义了数据源,通常是一个列表或数组。model: 18                                                           // 设置重读的次数// 定义了如何显示模型中的每个项目,它是一个包含要实例化的 QML 元素的组件。delegate: Rectangle{width: 100height: 100color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1)}}}
}

流式定位器

四、布局管理器

  Qt Quick 中的 布局管理器 是一组用于在用户界面中排列项目的类型。布局管理器 不仅进行布局,而且会改变子 Item 的大小,所以更适用于需要改变用户界面大小的应用。因为布局管理器也是继承自 Item,所以它们可以嵌套。布局管理器 包括 行布局(RowLayout)、列布局(ColumnLayout)、表格布局(GridLayout)。

4.1、水平布局管理器

  在 QML 中,水平布局通常是通过 RowLayout 来实现的。RowLayout 是一种布局管理器,它允许你将子元素水平地排列在一行中。RowLayout 有一个 spacing 属性,用来 指定它管理的 Item 之间的间隔。还有一个 layoutDirection 属性,可以 指定布局方向,取值为 Qt.LeftToRight从左到右放置 Item,这是默认行为,取值为 Qt.RightToLeft从右向左放置 Item

  修改 template.qml 文件的内容。

import QtQuick.Window
import QtQuick.Layouts// Window控件表示一个顶级窗口
// 在QML中,元素是通过大括号{}内的属性来配置的。
Window {width: 800                                                                  // 窗口的宽度height: 600                                                                 // 窗口的高度visible: true                                                               // 显示窗口color: "lightgray"                                                          // 窗口的背景颜色// 定义一个RowLayout,用于水平布局RowLayout {anchors.centerIn: parent                                                // 将中心的锚点定位到父元素的中心spacing: 100                                                            // 用于设置子元素之间的间隔layoutDirection: Qt.RightToLeft                                         // 设置布局的显示方向为从右到左Rectangle {implicitWidth : 100                                                 // 设置矩形的隐式宽度implicitHeight: 100                                                 // 设置矩形的隐式高度color: "#CCCCFF"                                                    // 设置矩形颜色}Rectangle {Layout.preferredWidth : 150                                         // 设置矩形的首选宽度Layout.preferredHeight : 50                                         // 设置矩形的首选高度color: "#99CCFF"                                                    // 设置矩形颜色}Rectangle {implicitWidth : 100                                                 // 设置矩形的隐式宽度Layout.preferredHeight: 100                                         // 设置矩形的首选高度color: "#FF6666"                                                    // 设置矩形颜色}}
}

水平布局管理器

在布局中如何要设置 Item 的宽度和高度,推荐使用 implicitWidth 属性 和 implicitHeight 属性设置,或者使用 Layout.preferredWidthLayout.preferredHeight 设置。

4.2、垂直布局管理器

  在 QML 中,垂直布局通常是通过 ColumnLayout 来实现的。这些布局管理器允许你将子元素垂直地排列在一起。ColumnLayout 本身也是一个 Item,可以使用 anchors 布局来决定它在父 Item 中的位置。ColumnLayoutspacing 属性描述 Item 之间的间隔

  修改 template.qml 文件的内容。

import QtQuick.Window
import QtQuick.Layouts// Window控件表示一个顶级窗口
// 在QML中,元素是通过大括号{}内的属性来配置的。
Window {width: 800                                                                  // 窗口的宽度height: 600                                                                 // 窗口的高度visible: true                                                               // 显示窗口color: "lightgray"                                                          // 窗口的背景颜色// 定义一个ColumnLayout,用于垂直布局ColumnLayout {height: parent.height                                                   // 高度anchors.centerIn: parent                                                // 将中心的锚点定位到父元素的中心Rectangle {implicitWidth : 100                                                 // 设置矩形的隐式宽度implicitHeight: 100                                                 // 设置矩形的隐式高度color: "#FF6666"                                                    // 设置矩形颜色}Rectangle {Layout.preferredWidth : 50                                          // 设置矩形的首选宽度Layout.preferredHeight : 50                                         // 设置矩形的首选高度color: "#99CCFF"                                                    // 设置矩形颜色}Rectangle {implicitWidth : 100                                                 // 设置矩形的隐式宽度Layout.preferredHeight: 100                                         // 设置矩形的首选高度color: "#CCCCFF"                                                    // 设置矩形颜色}}
}

4.3、栅格布局管理器

  在 QML 中,栅格布局是通过 GridLayout 来实现的。GridLayout 允许你将子元素放置在一个二维的网格中,并且可以指定网格的行数和列数,并控制每个元素在网格中的位置、大小和跨越多个单元格的能力。

  你可以通过 GridLayoutrowscolumns 属性 设定表格的行、列数rowSpacingcolumnSpacing 属性 指定行、列间距,单位是像素。

  在每个 Item 项中,我们可以通过 Layout.rowLayout.column 属性 指定该项在栅格布局中的位置。我们还可以通过 Layout.rowSpanLayout.columnSpan 属性 指定合并的行和列

  修改 template.qml 文件的内容。

import QtQuick.Window
import QtQuick.Layouts// Window控件表示一个顶级窗口
// 在QML中,元素是通过大括号{}内的属性来配置的。
Window {width: 800                                                                  // 窗口的宽度height: 600                                                                 // 窗口的高度visible: true                                                               // 显示窗口color: "lightgray"                                                          // 窗口的背景颜色// 定义一个GridLayout,用于网格布局GridLayout {width: parent.width                                                     // 宽度height: parent.height                                                   // 高度 anchors.centerIn: parent                                                // 将中心的锚点定位到父元素的中心rows: 3                                                                 // 设置行数columns: 3                                                              // 设置列数rowSpacing: 10                                                          // 设置行间距columnSpacing: 10                                                       // 设置列间距Rectangle {color: "#FF6666"                                                    // 设置矩形颜色implicitWidth: 200                                                  // 设置矩形的隐式宽度implicitHeight: 200                                                 // 设置矩形的隐式高度Layout.row: 0                                                       // 设置矩形所在的行Layout.column: 0                                                    // 设置矩形所在的列}Rectangle {color: "#FF6666"                                                    // 设置矩形颜色Layout.preferredWidth: 200                                          // 设置矩形的首选宽度Layout.preferredHeight: 200                                         // 设置矩形的首选高度Layout.row: 0                                                       // 设置矩形所在的行Layout.column: 1                                                    // 设置矩形所在的列}Rectangle {color: "#FF6666"                                                    // 设置矩形颜色implicitWidth: 200                                                  // 设置矩形的隐式宽度Layout.preferredHeight: 200                                         // 设置矩形的首选高度Layout.row: 0                                                       // 设置矩形所在的行Layout.column: 2                                                    // 设置矩形所在的列}Rectangle {color: "#99CCFF"                                                    // 设置矩形颜色Layout.row: 1                                                       // 设置矩形所在的行Layout.column: 0                                                    // 设置矩形所在的列Layout.rowSpan: 2                                                   // 占用二行Layout.columnSpan: 1                                                // 占用一列Layout.fillWidth: true                                              // 设置矩形填充Column布局的宽度Layout.fillHeight: true                                             // 设置矩形填充Column布局的高度}Rectangle {color: "#99CCFF"                                                    // 设置矩形颜色Layout.row: 1                                                       // 设置矩形所在的行Layout.column: 1                                                    // 设置矩形所在的列Layout.rowSpan: 1                                                   // 占用一行Layout.columnSpan: 2                                                // 占用两列Layout.fillWidth: true                                              // 设置矩形填充Column布局的宽度Layout.fillHeight: true                                             // 设置矩形填充Column布局的高度}Rectangle {color: "#CCCCFF"                                                    // 设置矩形颜色Layout.row: 2                                                       // 设置矩形所在的行Layout.column: 1                                                    // 设置矩形所在的列Layout.fillWidth: true                                              // 设置矩形填充Column布局的宽度Layout.fillHeight: true                                             // 设置矩形填充Column布局的高度}Rectangle {color: "#CCCCFF"                                                    // 设置矩形颜色Layout.row: 2                                                       // 设置矩形所在的行Layout.column: 2                                                    // 设置矩形所在的列Layout.fillWidth: true                                              // 设置矩形填充Column布局的宽度Layout.fillHeight: true                                             // 设置矩形填充Column布局的高度}}
}

栅格布局

  在栅格布局中,如果我们添加的子元素不指定行列信息,子元素会呈现水平布局或垂直布局。GridLayoutflow 属性描述 栅格布局的流模式Grid.LeftToRight 是默认值,这种流模式从左到右一个挨一个放置 Item,一行放满再放下一行。flow 取值为Grid.TopToBottom 时,从上到下一个挨一个放置 Item,一列放满再放下一列。

  修改 template.qml 文件的内容。

import QtQuick.Window
import QtQuick.Layouts// Window控件表示一个顶级窗口
// 在QML中,元素是通过大括号{}内的属性来配置的。
Window {width: 800                                                                  // 窗口的宽度height: 600                                                                 // 窗口的高度visible: true                                                               // 显示窗口color: "lightgray"                                                          // 窗口的背景颜色// 定义一个GridLayout,用于网格布局GridLayout {width: parent.width                                                     // 宽度height: parent.height                                                   // 高度 anchors.centerIn: parent                                                // 将中心的锚点定位到父元素的中心rows: 3                                                                 // 设置行数columns: 3                                                              // 设置列数rowSpacing: 10                                                          // 设置行间距columnSpacing: 10                                                       // 设置列间距flow: Grid.TopToBottom                                                  // 设置布局方式Rectangle {color: "#FF6666"                                                    // 设置矩形颜色Layout.fillWidth: true                                              // 设置矩形填充Column布局的宽度Layout.fillHeight: true                                             // 设置矩形填充Column布局的高度}Rectangle {color: "#FF6666"                                                    // 设置矩形颜色Layout.rowSpan: 2                                                   // 占用二行Layout.columnSpan: 1                                                // 占用一列Layout.fillWidth: true                                              // 设置矩形填充Column布局的宽度Layout.fillHeight: true                                             // 设置矩形填充Column布局的高度}Rectangle {color: "#99CCFF"                                                    // 设置矩形颜色Layout.fillWidth: true                                              // 设置矩形填充Column布局的宽度Layout.fillHeight: true                                             // 设置矩形填充Column布局的高度}Rectangle {color: "#99CCFF"                                                    // 设置矩形颜色Layout.rowSpan: 1                                                   // 占用一行Layout.columnSpan: 2                                                // 占用二列Layout.fillWidth: true                                              // 设置矩形填充Column布局的宽度Layout.fillHeight: true                                             // 设置矩形填充Column布局的高度}Rectangle {color: "#99CCFF"                                                    // 设置矩形颜色Layout.fillWidth: true                                              // 设置矩形填充Column布局的宽度Layout.fillHeight: true                                             // 设置矩形填充Column布局的高度}Rectangle {color: "#CCCCFF"                                                    // 设置矩形颜色Layout.rowSpan: 2                                                   // 占用二行Layout.columnSpan: 1                                                // 占用一列Layout.fillWidth: true                                              // 设置矩形填充Column布局的宽度Layout.fillHeight: true                                             // 设置矩形填充Column布局的高度}Rectangle {color: "#CCCCFF"                                                    // 设置矩形颜色Layout.fillWidth: true                                              // 设置矩形填充Column布局的宽度Layout.fillHeight: true                                             // 设置矩形填充Column布局的高度}}
}

栅格布局的流模式

4.4、栈布局管理器

  栈布局管理器 StackLayout 可以管理多个项目,但只能显示一个项目。可以通过 currentIndex 属性来 设置当前显示的项目,索引号对应布局管理器中子项目的顺序,从 0 开始。另外,StackLayout 还包含 indexisCurrentItem 等附加属性。

  修改 template.qml 文件的内容。

import QtQuick.Window
import QtQuick.Layouts// Window控件表示一个顶级窗口
// 在QML中,元素是通过大括号{}内的属性来配置的。
Window {width: 800                                                                  // 窗口的宽度height: 600                                                                 // 窗口的高度visible: true                                                               // 显示窗口color: "lightgray"                                                          // 窗口的背景颜色// 定义一个StackLayout,用于栈布局StackLayout {id: stackLayoutId                                                       // IDwidth: parent.width                                                     // 宽度height: parent.height                                                   // 高度 anchors.centerIn: parent                                                // 将中心的锚点定位到父元素的中心Rectangle {color: "#FF6666"                                                    // 设置矩形颜色Layout.fillWidth: true                                              // 填充宽度Layout.fillHeight: true                                             // 填充高度}Rectangle {color: "#66ffb0ff"                                                    // 设置矩形颜色Layout.fillWidth: true                                              // 填充宽度Layout.fillHeight: true                                             // 填充高度}Rectangle {color: "#6673ffff"                                                    // 设置矩形颜色Layout.fillWidth: true                                              // 填充宽度Layout.fillHeight: true                                             // 填充高度}}// 鼠标事件MouseArea {anchors.fill: parent                                                    // 填充父元素// 点击事件onClicked: {stackLayoutId.currentIndex = (stackLayoutId.currentIndex + 1) % stackLayoutId.count}}
}
http://www.zskr.cn/news/15004.html

相关文章:

  • VUE - 实战 2
  • 2025/9/29
  • tcp与udp 协议 - 摘星
  • 如何找出集合的两个子集使得和相等?
  • Python语言自动玩游戏的俄罗斯方块游戏程序代码QZQ
  • Spring AI(七)Spring AI 的RAG搭建集合火山向量模型+阿里云Tair(企业版)
  • 禁止DataGridView自动根据数据源的结构生成列
  • 基于Java+SSM+Django宠物医院信息管理系统(源码+LW+调试文档+讲解等)/宠物医院软件/宠物医疗管理系统/宠物诊所信息系统/动物医院管理软件/宠物医院信息管理/宠物健康记录系统 - 详解
  • 实用指南:Coze源码分析-资源库-删除数据库-后端源码-基础设施/数据存储层
  • MyBatis缓存架构深度拆解:从PerpetualCache的LRU陷阱到Redis分布式二级缓存防穿透实战 - 详解
  • 9 30 -
  • 8. Spring AI tools/function-call - 教程
  • LeetCode刷题记录----62.不同路径(Medium) - 详解
  • 「补充篇」在Cloudflare上设置并更新SRV记录
  • 2025电源适配器权威推荐榜:高效稳定、安全耐用的优质品牌之
  • 「LUCKY STUN穿透」IPv4和IPv6分离重定向
  • 如何设计出优秀、健壮且易于维护的API——关于HTTP状态码与业务逻辑状态码的处理 - 浪矢
  • 做题记录(Part 1. 基础算法)
  • 实用指南:零基础学AI大模型之Prompt提示词工程
  • 详细介绍:2023 美赛C Predicting Wordle Results(上)
  • 一阶逻辑及其变体在自然语言深层语义分析中的作用、挑战与未来启示 - 实践
  • 《电路基础》第六章学习笔记
  • 利用IOT-Tree消息流【标签读写】功能详细说明
  • 2025.10.2 2024CCPC重庆
  • 命令行实用技巧
  • 2025无锡网咖权威推荐榜:停车便利体验佳,畅享上网好时光
  • 教培公司 —— 讲课评分表
  • 2025无锡黄金上门回收公司权威推荐榜:专业估价与诚信服务口碑之选
  • P2141 [NOIP 2014 普及组] 珠心算测验
  • 2025.10 做题笔记