QT的五类布局

QT的五类布局 QHBoxLayout 水平布局QVBoxLayout 垂直布局QGridLayout 网格布局QFormLayout 表单布局QSplitter 分割条布局表单布局和网格布局区别网格随布局的变化而变化表单布局水平布局变化垂直不变化一.水平布局和垂直布局常用函数窗口大小setGeometryax,ay,aw,ah创建分组框QGroupBox创建文本编辑框QTextEdit设置尺寸策略让控件在布局中自动拉伸填充可用空间1addWidget用来给布局添加控件的函数同时可以控制行列这样的位置可以选择添加比如按钮、文本框、分组框等2QSizePolicy::Expanding控件会尽可能占据布局分配的空间横向纵向都拉伸例如:QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)3setSizePolicy() 核心作用是设置控件在布局中的拉伸 / 收缩规则只对布局中的控件生效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() 配合控制行 / 列的拉伸比例四.分割条布局QSplitter分割条函数可以进行缩放的完成该界面红色部分右水平分割蓝色绿色在右边框中是垂直分割常用函数setTitle标题栏起名字的意思setOrientation()当中调用两个宏Qt::Horizontal Qt::Vertical水平/竖直main_spliter-setChildrenCollapsible(false) 关闭移动的动态代码