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

Qt:15.布局管理器(QVBoxLayout-垂直布局、QHBoxLayout-水平布局、QGridLayout-网格布局、拉伸系数,控制控件显示的大小)

目录

一、QVBoxLayout-垂直布局:

1.1QVBoxLayout介绍:

1.2 属性介绍:

1.3细节理解:

二、QHBoxLayout-水平布局:

三、QGridLayout-网格布局:

3.1QGridLayout介绍:

3.2常用方法:

四、拉伸系数,控制控件显示的大小:

4.1拉伸系数介绍:

4.2水平拉伸-控件的宽度:

4.3控件的大小策略:

4.4垂直拉伸-控件的高度:


一、QVBoxLayout-垂直布局:

1.1QVBoxLayout介绍:

  • QVBoxLayout 是Qt中的一个布局管理器。
  • 用于将子控件垂直排列。它会自动调整子控件的大小和位置,使它们在垂直方向上依次排列,占据可用的空间。
  • 将控件添加到布局管理器:layout->addWidget(控件名);
  • 将布局管理器挂到对象树:this->setLayout(layout_1);
  • 将布局管理器添加到布局管理器:layout_1->addLayout(layout_2);

1.2 属性介绍:

layoutLeftMargin
  • 设置布局左侧的边距。
  • 获取当前左边距:layout->contentsMargins().left()
layoutTopMargin
  • 设置布局顶部的边距。
  • 获取当前顶部边距:layout->contentsMargins().top()
layoutRightMargin
  • 设置布局右侧的边距。
  • 获取当前右边距:layout->contentsMargins().right()
layoutBottomMargin
  • 设置布局底部的边距。
  • 获取当前底部边距:layout->contentsMargins().bottom()
layoutSpacing
  • 设置子控件之间的间距。
  • 获取当前间距:layout->spacing()
  • 设置间距:layout->setSpacing(spacing)
layoutStretch
  • 设置子控件的伸缩因子。
  • 设置伸缩因子:layout->setStretch(index, stretch)
  • 获取当前伸缩因子:layout->stretch(index)
layoutSizeConstraint
  • 设置布局的尺寸约束。
  • 获取当前尺寸约束:layout->sizeConstraint()
  • 设置尺寸约束:layout->setSizeConstraint(constraint)

1.3细节理解:

  • 一个Widget只能创建一个布局管理器。
  • 通过代码创建的布局管理器,调整窗口的大小,里面的控件也会随之拉伸。
  • 通过ui界面可以创建多个布局管理器,但是创建多余一个的布局管理器前,会先创建一个Widget,此时拉申程序的窗口,控件不会随着伸缩。

二、QHBoxLayout-水平布局:

  • QHBoxLayout 是Qt中的一个布局管理器。
  • 用于将子控件水平排列。它会自动调整子控件的大小和位置,使它们在水平方向上依次排列,占据可用的空间。
  • 属性和垂直布局相同。

三、QGridLayout-网格布局:

3.1QGridLayout介绍:

  • QGridLayout 是 Qt 中的一种布局管理器,用于在网格中排列子控件。它允许在特定的行和列中添加控件或其他布局。

3.2常用方法:

void addLayout(QLayout *layout, int row, int column)
  • 将子布局添加到特定位置
  • layout:要添加的子布局。
  • row:子布局所在的行。
  • column:子布局所在的列。
void addLayout(QLayout *layout, int row, int column, int rowSpan, int columnSpan)
  • 将子布局添加到特定位置,并指定行跨度和列跨度
  • layout:要添加的子布局。
  • row:子布局起始行。
  • column:子布局起始列。
  • rowSpan:子布局占用的行数。
  • columnSpan:子布局占用的列数。

四、拉伸系数,控制控件显示的大小:

4.1拉伸系数介绍:

  • 通过代码创建的控件,将它添加到布局管理器后,他们的大小是均等的。
  • 如果要创建出大小不同的控件,就需要通过拉伸系数设置控件。
  • 拉伸系数就相当于设置控件之间的比例。

4.2水平拉伸-控件的宽度:

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//创建6个按钮QPushButton* b1=new QPushButton("1");QPushButton* b2=new QPushButton("2");QPushButton* b3=new QPushButton("3");QPushButton* b4=new QPushButton("4");QPushButton* b5=new QPushButton("5");QPushButton* b6=new QPushButton("6");//创建一个网格布局控制器,并将6个按钮分为两行,每行三个QGridLayout* layout=new QGridLayout();layout->addWidget(b1,0,0);layout->addWidget(b2,0,1);layout->addWidget(b3,0,2);layout->addWidget(b4,1,0);layout->addWidget(b5,1,1);layout->addWidget(b6,1,2);//设置拉伸系数this->setLayout(layout);layout->setColumnStretch(0,1);layout->setColumnStretch(1,3);layout->setColumnStretch(2,5);}

  • 如果将拉伸系数设为0,那么对应列的控件的水平宽度是一个固定值,不再参与比例拉伸。
  • 设置水平拉伸因子:layout->setColumnStretch(column,stretch);

4.3控件的大小策略:

  • 在 Qt 中,控件的大小策略(QSizePolicy)定义了控件在布局管理器中的行为方式,包括如何在水平和垂直方向上拉伸和收缩。默认情况下,控件的 QSizePolicy 会影响它们在布局中的拉伸和缩放行为。
  • 每个控件在创建时都有一个默认的 QSizePolicy。QSizePolicy 包含两个主要属性:水平策略和垂直策略。
  • 不同控件可能有不同的默认策略。
  • QSizePolicy 主要有以下几种常见的策略:
  • QSizePolicy::Fixed:控件的大小是固定的,不会改变。
  • QSizePolicy::Minimum:控件可以收缩到比推荐的大小更小,但不会拉伸。
  • QSizePolicy::Maximum:控件可以拉伸到比推荐的大小更大,但不会收缩。
  • QSizePolicy::Preferred:控件会根据其推荐的大小进行调整,但可以在必要时拉伸或收
  • 缩。
  • QSizePolicy::Expanding:控件会尽可能地拉伸以填充可用空间。
  • QSizePolicy::Ignored:控件的大小不受其内容或推荐大小的影响,可以任意调整。

4.4垂直拉伸-控件的高度:

  • label的水平拉伸默认策略为QSizePolicy::Expanding,但是他的垂直拉伸的默认策略是QSizePolicy::Fixed。
  • 如果想要和水平拉伸一样自由拉伸,就要手动设置label的拉伸策略为QSizePolicy::Expanding。
  • 下面通过两个图片对比设置拉伸策略后的差异:

        

        

  • 当垂直方向可以自由拉伸之后。就可以设置比例拉伸了。
  • 设置垂直拉伸因子:layout->setRowStretch(column,stretch);
http://www.lryc.cn/news/397065.html

相关文章:

  • 图论---无向图中国邮路的实现
  • Rockchip RK3588 - Rockchip Linux SDK脚本分析
  • 【C++中resize和reserve的区别】
  • 计算机毕业设计Python深度学习游戏推荐系统 Django PySpark游戏可视化 游戏数据分析 游戏爬虫 Scrapy 机器学习 人工智能 大数据毕设
  • Python面试题:如何在 Python 中进行正则表达式操作?
  • C#面:简述什么是中间件(Middleware)?
  • AWS Glue 与 Amazon Redshift 的安全通信配置
  • nginx访问控制
  • 高效应对网络攻击,威胁检测响应(XDR)平台如何提升企业应急响应能力
  • 多线程问题
  • 自动优化:SQL Server数据库自动收缩配置指南
  • 华为机考真题 -- 密码解密
  • ScrapySharp框架:小红书视频数据采集的API集成与应用
  • PostgreSQL 数据库监控项
  • 用python生成词频云图(python实例二十一)
  • HTML 标签简写和全称及其对应的中文说明和实例
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • 全网最适合入门的面向对象编程教程:13 类和对象的 Python 实现-可视化阅读代码神器 Sourcetrail 的安装使用
  • Django 视图 - FBV 与 CBV
  • AI机器人在未来的应用场景预测:是否会取代人类?华为、百度、特斯拉他们在AI领域都在做什么?
  • 第58期 | GPTSecurity周报
  • maven 依赖冲突
  • demon drone 200无人机标定流程
  • 案例开发-日程管理-第一期
  • 【Java 注解,自定义注解,元注解,注解本质,注解解析】
  • 染色法判定二分图
  • 自动气象站的主要功能优势
  • Java中实现二维数组(矩阵)的转置
  • Prometheus+Grafana主机运行数据
  • GraphQL在Postman中:释放API查询的强大潜能