QHBoxLayout 水平布局
QVBoxLayout 垂直布局
QGridLayout 网格布局
QFormLayout 表单布局
QSplitter 分割条布局
表单布局和网格布局区别:

网格:随布局的变化而变化
表单布局:水平布局变化,垂直不变化
一.水平布局和垂直布局

常用函数
窗口大小:setGeometry(ax,ay,aw,ah)
创建分组框(QGroupBox)
创建文本编辑框(QTextEdit)
设置尺寸策略:让控件在布局中自动拉伸填充可用空间
(1)
addWidget()用来给布局添加控件的函数,同时可以控制行列这样的位置(可以选择添加)(比如:按钮、文本框、分组框等)
(2)QSizePolicy::Expanding:控件会尽可能占据布局分配的空间(横向+纵向都拉伸)
例如:
QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)
(3)
setSizePolicy() 核心作用是设置控件在布局中的拉伸 / 收缩规则(只对布局中的控件生效)
setStretch() 是 Qt 布局中控制控件在布局内占比分配
代码

二.网格布局

常用函数
QComboBox() :下拉选择框,利用父子机制管理内存
网格布局:QGridLayout()
grp_layout->addWidget(btn1, 0, 0, 1, 1); 控件对象,原始坐标(x,y),宽度数和列数大小
代码

三.表单布局

用在封装函数的宏(也可以写后面数字)
QFormLayout 只有 0、1、2 这三个角色值,没有其他枚举项;
它们专门用来控制表单布局中「标签、输入控件、跨列控件」的排版;
你在 addRow() 或 setWidget() 时,只能传这三个值之一(后者由于前者)
0 代表标签列(比如 "用户名:""密码:" 这类文本标签)
1 代表输入控件列(比如输入框、下拉框、按钮等交互控件)
2 代表跨列控件(一个控件占据标签 + 输入两列,常用于分组框、提示文本等)
QT的两种布局函数
addRow和setWidget(后者更好)
addRow() 是「快捷添加整行」,setWidget() 是「精准控制单元格」
语法:
setWidget(行号, 角色, 控件)
控件放在该行的哪一列 / 占多少列(只有 3 种取值:0/1/2),上面的0/1/2充当角色栏
addRow( 标签文本,控件 )
伙伴函数
setBuddy ( )建立伙伴关系
用法:user_label->setBuddy(user_edit);
代码

快速搭建标准表单(标签 + 输入框) 自定义表单布局(跨列、空行、动态修改)
选 addRow() 当:
搭建标准表单(标签 + 输入框 / 下拉框 / 按钮);
不需要手动控制行号,只想快速追加行;
开发效率优先,代码简洁为主
选 setWidget() 当:
需要动态修改表单(比如替换某一行的输入框为下拉框);
需要自定义行号(比如插入空行、覆盖已有行);
需要精准控制角色(比如某行只显示标签,不显示输入框)
常见坑点
setWidget() 的行号从 0 开始,且不能超出当前行数(否则会出现空行);
addRow() 自动追加行,多次调用会按顺序往后加,无法插入到指定行;
跨列控件(SpanningRole)用 addRow(单个控件) 更简洁,不用写 setWidget(行号, SpanningRole, 控件);
两者都可以和 setStretch() 配合,控制行 / 列的拉伸比例
常用函数
QLineEdit()创建单条文本输入框
四.分割条布局

QSplitter()分割条函数(可以进行缩放的)完成该界面:红色部分右水平分割,蓝色绿色在右边框中是垂直分割
常用函数
setTitle():标题栏(起名字的意思)
setOrientation():当中调用两个宏Qt::Horizontal ,Qt::Vertical(水平/竖直)
main_spliter->setChildrenCollapsible(false) 关闭移动的动态
代码
