当前位置: 首页 > news >正文

70常用控件_QVBoxLayout的使用

目录

代码⽰例: 使⽤ QVBoxLayout 管理多个控件.

代码⽰例: 创建两个 QVBoxLayout

布局管理器
之前使用Qt在界面上创建的控件,都是通过"绝对定位"的方式来设定的.
也就是每个控件所在的位置,都需要计算坐标,最终通过setGeometry或者move方式摆放过去.
这种设定方式其实并不方便,尤其是界面如果内容比较多,不好计算,而且一个窗口大小往往是可以调整
的,按照绝对定位的方式,也无法自适应窗口大小.
因此Qt引入"布局管理器"(Layout)机制,来解决上述问题,
当然, 布局管理器并⾮ Qt 独有. 其他的 GUI 开发框架, 像 Android, 前端等也有类似的机制

垂直布局
使⽤ QVBoxLayout 表⽰垂直的布局管理器. V 是 vertical 的缩写.

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

 Layout 只是⽤于界⾯布局, 并没有提供信号.

代码⽰例: 使⽤ QVBoxLayout 管理多个控件.

1) 编写代码, 创建布局管理器和三个按钮. 并且把按钮添加到布局管理器中.
使⽤ addWidget 把控件添加到布局管理器中.
使⽤ setLayout 设置该布局管理器到 widget 中.
2) 运⾏程序, 可以看到此时界⾯上的按钮就存在于布局管理器中. 随着窗⼝尺⼨变化⽽发⽣改变.
此时三个按钮的尺⼨和位置, 都是⾃动计算出来的

通过上述代码的⽅式, 只能给这个 widget 设定⼀个布局管理器. 实际上也可以通过 Qt Design 在⼀个窗 ⼝中创建多个布局管理器.

代码⽰例: 创建两个 QVBoxLayout

1) 在界⾯上创建两个 QVBoxLayout , 每个 QVBoxLayout 各放三个按钮.
2) 运⾏程序, 可以看到这些按钮已经⾃动排列好. 只不过当前这些按钮的位置不能随着窗⼝⼤⼩⾃动变化

 

通过 Qt Designer 创建的布局管理器, 其实是先创建了⼀个 widget, 设置过 geometry 属性
的. 再把这个 layout 设置到这个 widget 中.
实际上, ⼀个 widget 只能包含⼀个 layout.
打开 ui ⽂件的原始 xml, 可以看到其中的端倪.
这种情况下 layout 并⾮是窗⼝ widget 的布局管理器, 因此不会随着窗⼝⼤⼩改变
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
#include <QVBoxLayout>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 创建三个按钮, 使用垂直布局管理器管理起来QPushButton* button1 = new QPushButton("按钮1");QPushButton* button2 = new QPushButton("按钮2");QPushButton* button3 = new QPushButton("按钮3");// 创建布局管理器QVBoxLayout* layout = new QVBoxLayout();layout->addWidget(button1);layout->addWidget(button2);layout->addWidget(button3);// 把布局管理器添加到窗口中.this->setLayout(layout);}Widget::~Widget()
{delete ui;
}

 

之前把控件放到界面上,都是靠“手动”的方式来布局的~~
这种手动调整的方式是不科学的!!
1.手动布局的方式非常复杂,而且不精确.
2.无法对窗口大小进行自适应~~
布局管理器~~


Qt中提供了很多种布局管理器~~
1.垂直布局~~
2.水平布局~
3. 网格布局
4. 表单布局


每个widget中只能设置一个布局管理器.


如果在代码中创建layout,其实是只创建了一个layout.
如果在QtDesigner中创建的layout,先创建了一个Widget,然后再在这个新的Widget中添加了一个layout.

layout标签表示的是布局管理器的本体.
外面自动创建出了一个Widget
每个layout里面又可以包含若干个item(也就是一个按钮)

 刚才是先拖了layout过去,然后再往layout中拖其他控件.
也可以先拖其他控件,后给这些控件套上layout~~


把选中的若干控件外头套上一个垂直布局的layout

 

 

http://www.xdnf.cn/news/932347.html

相关文章:

  • 指针的使用——字符、字符串、字符串数组(char*)
  • C++进阶--C++11--智能指针(重点)
  • 12.7Swing控件6 JList
  • gitcode与github加速计划
  • LabVIEW Modbus 主站冗余控制
  • css | class中 ‘.‘ 和 ‘:‘ 的使用 | 如,何时用 .is-selected{ ... } 何时用 :hover{...}?
  • 3Ds Max 2026安装包+教程网盘下载与安装教程指南
  • [特殊字符] Whisper 模型介绍(OpenAI 语音识别系统)
  • WEB3全栈开发——面试专业技能点P1Node.js / Web3.js / Ethers.js
  • 【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
  • 图神经网络(GNN)模型的基本原理
  • MySQL:CTE 通用表达式
  • 在React 中安装和配置 shadcn/ui
  • 我用Cursor写了一个视频转文字工具,已开源,欢迎体验
  • leetcode 10. 正则表达式匹配
  • 对比传统引擎,Unity3D 在生产配套中的独特优势
  • 【MySQL系列】MySQL 执行 SQL 文件
  • Java后端检查空条件查询
  • 快排图解及JS模板代码
  • 循环变量捕获问题​​
  • redis--黑马点评--分布式锁实现详解
  • 【C/C++】EBO空基类优化介绍
  • C++----剖析list
  • 言和语的洞见,即:融智学解决方案
  • SEO新手优化步骤拆解
  • 人脸识别技术应用备案办理指南
  • 可可·香奈儿 活出自己
  • 【Elasticsearch】映射:null_value 详解
  • 代码规范和架构【立芯理论一】(2025.06.08)
  • 分形几何在医学可视化中的应用:从理论到Python实战