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

代码

相关推荐
一隅论数智2 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
倒头就睡的小比特2 天前
算法竞赛C++常用的STL
c++·算法
weilx12342 天前
C++笔记-文件IO-<fcntl.h>
c++
XiHongShi20162 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
爱吃苹果的日记本2 天前
离散数学第六课
学习·离散数学
Smileyqp沛沛2 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++
C语言小火车2 天前
C/C++ 为什么需要编译器?
开发语言·c++
AI职业加油站2 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
旖旎夜光2 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控