QT的五类布局

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) 关闭移动的动态

代码

相关推荐
diygwcom11 分钟前
学习开源数据采集与监视控制SCADA-即工业组态开源框架FUXA
学习·开源
筱璦31 分钟前
期货软件开发 - C# 调用 HQChart 指标计算 C++ 动态库
c++·microsoft·c#
zl_dfq1 小时前
Python学习5 之【字符串】
python·学习
不想写代码的星星1 小时前
C++ 内存管理:分区、自定义分配器、常见问题与检测工具
c++
-许平安-2 小时前
MCP项目笔记九(插件 bacio-quote)
c++·笔记·ai·plugin·mcp
沉鱼.442 小时前
第十三届题目
c语言·c++·算法
ada0_ada12 小时前
qt模块学习记录
开发语言·qt·学习
Xudde.2 小时前
班级作业笔记报告0x10
笔记·学习·安全·web安全·php
liulilittle2 小时前
C++ 无锁编程:单停多发送场景高性能方案
服务器·开发语言·c++·高性能·无锁·原子
无限进步_2 小时前
【C++】巧用静态变量与构造函数:一种非常规的求和实现
开发语言·c++·git·算法·leetcode·github·visual studio