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);

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 12:42:01       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 12:42:01       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 12:42:01       57 阅读
  4. Python语言-面向对象

    2024-07-12 12:42:01       68 阅读

热门阅读

  1. Backend - C# 基础知识

    2024-07-12 12:42:01       18 阅读
  2. 网络编程:数据包的封装----libnet库

    2024-07-12 12:42:01       26 阅读
  3. 使用定时器消除抖动

    2024-07-12 12:42:01       21 阅读
  4. Spring框架(三)——AOP--实现方式

    2024-07-12 12:42:01       18 阅读
  5. vue-grid-layout详解

    2024-07-12 12:42:01       23 阅读
  6. linux,docker,k8s常见命令

    2024-07-12 12:42:01       21 阅读
  7. TensorFlow 和 PyTorch 显示模型参数方法详解

    2024-07-12 12:42:01       20 阅读
  8. 【go学习合集】进阶数据类型2 -------->切片

    2024-07-12 12:42:01       20 阅读
  9. 扩展欧几里得c++

    2024-07-12 12:42:01       24 阅读
  10. elementui的table的@selection-change阻止事件改变

    2024-07-12 12:42:01       22 阅读
  11. 介绍5款.NET开源、功能强大的Windows桌面工具箱

    2024-07-12 12:42:01       17 阅读