【Qt】控件——布局管理器、常见的布局管理器、布局管理器的使用、垂直布局、水平布局、网格布局、表单布局、Spacer

文章目录

Qt

布局管理器

之前在使用 Qt 创建界面上的控件时,大多是通过 "绝对定位" 的方式来设定的。即每个控件所在的位置都需要计算坐标,最终通过 setGeometry 或者 move 方式进行摆放。

然而,这种设定方式实际上并不方便。尤其是当界面内容较多时,不好计算控件的位置。而且一个窗口的大小往往是可以调整的,按照绝对定位的方式,无法自适应窗口大小。

因此,Qt 引入了 "布局管理器"(Layout)机制,以解决上述问题。

垂直布局

使用 QVBoxLayout 表示垂直的布局管理器。其中,V 是 vertical 的缩写。

属性 说明
layoutLeftMargin 左侧边距
layoutRightMargin 右侧边距
layoutTopMargin 上方边距
layoutBottomMargin 下方边距
layoutSpacing 相邻元素之间的间距

  1. QVBoxLayout 是垂直布局,addWidget() 用于向布局器中添加元素。

水平布局

使用 QHBoxLayout 表示水平的布局管理器。其中,H 是 horizontal 的缩写。

核心属性与 QVBoxLayout 属性一致,具体如下:

属性 说明
layoutLeftMargin 左侧边距
layoutRightMargin 右侧边距
layoutTopMargin 上方边距
layoutBottomMargin 下方边距
layoutSpacing 相邻元素之间的间距

  1. QHBoxLayout 是水平布局管理器,addWidget用于添加元素。

  1. QVBoxLayout 和 QHBoxLayout 可以配合使用。

网格布局

Qt 中提供了 QGridLayout 用于实现网格布局的效果,能够达到 M * N 的网格布局形式。

核心属性与 QVBoxLayout 和 QHBoxLayout 有相似之处,但在设置间距时是按照垂直和水平两个方向进行设置的。

属性 说明
layoutLeftMargin 左侧边距
layoutRightMargin 右侧边距
layoutTopMargin 上方边距
layoutBottomMargin 下方边距
layoutHorizontalSpacing 相邻元素之间水平方向的间距
layoutVerticalSpacing 相邻元素之间垂直方向的间距
layoutRowStretch 行方向的拉伸系数
layoutColumnStretch 列方向的拉伸系数

  1. 网格布局管理器,类似网格可以调整元素的位置。

  1. 使用QSizePolicy 提供的一些宏可以修改按钮的样式。

表单布局

除了上述的布局管理器之外,Qt 还提供了 QFormLayout。它属于 QGridLayout 的特殊情况,专门用于实现两列表单的布局。

这种表单布局多用于让用户填写信息的场景。其中,左侧列为提示信息,右侧列为输入框,方便用户直观地了解每个输入项的含义并进行相应的输入操作。

  1. QGridLayout 为表单布局。

Spacer

在使用布局管理器的时候,可能需要在控件之间添加一段空白,此时可以使用 QSpacerItem 来表示。

属性 说明
width 宽度
height 高度
hData 水平方向的 sizePolicy
QSizePolicy::Ignored 忽略控件的尺寸,不对布局产生影响。
QSizePolicy::Minimum 控件的最小尺寸为固定值,布局时不会超过该值。
QSizePolicy::Maximum 控件的最大尺寸为固定值,布局时不会小于该值。
QSizePolicy::Preferred 控件的理想尺寸为固定值,布局时会尽量接近该值。
QSizePolicy::Expanding 控件的尺寸可以根据空间调整,尽可能占据更多空间。
QSizePolicy::Shrinking 控件的尺寸可以根据空间调整,尽可能缩小以适应空间。
vData 垂直方向的 sizePolicy,选项同水平方向。

  1. Spacer 向布局管理器中添加空白。

相关推荐
澄澈i2 小时前
CMake学习篇[3]---CMake进阶+嵌套CMakeLists+多层级关系
c++·学习·cmake
杨小码不BUG3 小时前
蛇形舞动:矩阵填充的艺术与算法(洛谷P5731)
c++·算法·矩阵·csp-j/s·循环控制
执尺量北斗3 小时前
LinkMate 智能会议室系统:基于 Qt / QML / WebRTC / FFmpeg / Whisper / OpenGL 的实时音视频会议平台
qt·ffmpeg·webrtc
草莓熊Lotso3 小时前
《C++ STL list 完全指南:从基础操作到特性对比,解锁链表容器高效用法》
开发语言·c++·list
繁星星繁4 小时前
C++11学习笔记
c++·笔记·学习
Stanford_11069 小时前
如何利用Python进行数据分析与可视化的具体操作指南
开发语言·c++·python·微信小程序·微信公众平台·twitter·微信开放平台
千里马-horse11 小时前
Async++ 源码分析8--partitioner.h
开发语言·c++·async++·partitioner
Lucis__12 小时前
再探类&对象——C++入门进阶
开发语言·c++
北京不会遇到西雅图13 小时前
【SLAM】【后端优化】不同优化方法对比
c++·机器人
jndingxin13 小时前
c++多线程(6)------ 条件变量
开发语言·c++