【Qt 学习笔记】Qt常用控件 | 布局管理器 | 网格布局Grid Layout

简介: 【Qt 学习笔记】Qt常用控件 | 布局管理器 | 网格布局Grid Layout

Qt常用控件 | 布局管理器 | 网格布局Grid Layout

一、QGridLayout介绍

1. 简介

QGridLayout是一个用于在Qt中进行布局的类。它将窗口或小部件划分为一个规则的网格,并将小部件放置在网格的不同位置上。QGridLayout可以自动调整小部件的大小和位置,以适应窗口的大小调整。


使用QGridLayout布局时,可以通过指定行和列的索引来将小部件放置在网格的特定位置。可以使用addWidget()函数将小部件添加到网格布局中。还可以使用addLayout()函数将另一个布局添加到网格布局中,并将其放置在特定的行和列中。

2. 核心属性

image.png

二、QGridLayout使用

1. 使用QGridLayout管理网格布局

  1. 使用代码在界面中创建4个按钮,并创建QGridLayout布局

使用 addWidget 添加控件到布局管理器中. 但是添加的同时会指定两个坐标. 表示放在第几行, 第

几列.

#include "widget.h"
#include "ui_widget.h"
#include<QPushButton>
#include<QGridLayout>
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");
    QPushButton * button4=new QPushButton("按钮4");
    //创建布局管理器,并将按钮添加到布局中
    QGridLayout *layout =new QGridLayout();
    layout->addWidget(button1,0,0);
    layout->addWidget(button2,1,0);
    layout->addWidget(button3,2,0);
    layout->addWidget(button4,3,0);
    //设置layout到窗口界面中
    this->setLayout(layout);
}

Widget::~Widget()
{
    delete ui;
}

2.运行代码,查看运行结果(实现垂直布局)

3.调整代码中的布局管理,实现改变按钮位置

4.调整布局管理器的代码(实现水平布局),代码如下

layout->addWidget(button1,0,0);
layout->addWidget(button2,0,1);
layout->addWidget(button3,0,2);
layout->addWidget(button4,0,3);

  1. 调整布局管理器的代码(实现2行2列),代码如下
layout->addWidget(button1,0,0);
layout->addWidget(button2,0,1);
layout->addWidget(button3,1,0);
layout->addWidget(button4,1,1);

  1. 调整布局管理器的代码(实现斜角布局),代码如下
layout->addWidget(button1,0,0);
layout->addWidget(button2,1,1);
layout->addWidget(button3,2,2);
layout->addWidget(button4,3,3);

全部代码:

#include "widget.h"
#include "ui_widget.h"
#include<QPushButton>
#include<QGridLayout>
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");
    QPushButton * button4=new QPushButton("按钮4");
    //创建布局管理器,并将按钮添加到布局中
    QGridLayout *layout =new QGridLayout();
    //layout->addWidget(button1,0,0);
    //layout->addWidget(button2,1,0);
    //layout->addWidget(button3,2,0);
    //layout->addWidget(button4,3,0);

    //layout->addWidget(button1,0,0);
    //layout->addWidget(button2,0,1);
    //layout->addWidget(button3,0,2);
    //layout->addWidget(button4,0,3);

    //layout->addWidget(button1,0,0);
    //layout->addWidget(button2,0,1);
    //layout->addWidget(button3,1,0);
    //layout->addWidget(button4,1,1);

    layout->addWidget(button1,0,0);
    layout->addWidget(buttn2,1,1);
    layout->addWidget(button3,2,2);
    layout->addWidget(button4,3,3);

    //设置layout到窗口界面中
    this->setLayout(layout);
}

Widget::~Widget()
{
    delete ui;
}

2. 设置水平方向的拉伸系数

  1. 使用代码在界面中创建六个按钮,以2行3列的方式进行布局

使用setColumnStretch 设置每⼀列的拉伸系数

#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
#include <QGridLayout>
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");
    QPushButton* button4 = new QPushButton("按钮4");
    QPushButton* button5 = new QPushButton("按钮5");
    QPushButton* button6 = new QPushButton("按钮6");

    QGridLayout *layout =new QGridLayout();
    layout->addWidget(button1,0,0);
    layout->addWidget(button2,0,1);
    layout->addWidget(button3,0,2);
    layout->addWidget(button4,1,0);
    layout->a
    //设置拉伸系数
    //第0列拉伸⽐例设为0, 即为固定⼤⼩, 不参与拉伸
    layout->setColumnStretch(0,0);
    //第1列拉伸⽐例设为1;
    layout->setColumnStretch(1,1);
    //第2列拉伸⽐例设为2,即为第2列的宽度是第1列的2倍
    layout->setColumnStretch(2,2);

}

Widget::~Widget()
{
    delete ui;
}

2.运行代码,查看运行结果,并且随着窗⼝调整动态变化

3. 设置垂直方向的拉伸系数

  1. 在代码中创建六个按钮,设置网格布局管理(三行二列)
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");
    QPushButton* button4 = new QPushButton("按钮4");
    QPushButton* button5 = new QPushButton("按钮5");
    QPushButton* button6 = new QPushButton("按钮6");
    //创建网格布局
    QGridLayout* layout = new QGridLayout();
    layout->addWidget(button1,0,0);
    layout->addWidget(button2,0,1);
    layout->addWidget(button3,1,0);
    layout->addWidget(button4,1,1);
    layout->addWidget(button5,2,0);
    layout->addWidget(button6,2,1);

    //设置垂直拉伸比例
    layout->setRowStretch(0,1);
    layout->setRowStretch(1,2);
    layout->setRowStretch(2,3);


    //将layout设置到窗口上
    this->setLayout(layout);
}
  1. 调整按钮的控件尺寸的策略

使⽤ setSizePolicy 设置按钮的尺⼨策略. 可选的值如下:

• QSizePolicy::Ignored : 忽略控件的尺⼨,不对布局产⽣影响。

• QSizePolicy::Minimum : 控件的最⼩尺⼨为固定值,布局时不会超过该值。

• QSizePolicy::Maximum : 控件的最⼤尺⼨为固定值,布局时不会⼩于该值。

• QSizePolicy::Preferred : 控件的理想尺⼨为固定值,布局时会尽量接近该值。

• QSizePolicy::Expanding : 控件的尺⼨可以根据空间调整,尽可能占据更多空间。

• QSizePolicy::Shrinking : 控件的尺⼨可以根据空间调整,尽可能缩⼩以适应空间。

// 设置按钮的sizePolicy, 此时按钮的⽔平⽅向和垂直⽅向都会尽量舒展开
button1->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
button2->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
button3->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
button4->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
button5->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
button6->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
  1. 运行代码,查看结果

此时的按钮垂直⽅向都舒展开了. 并且调整窗⼝尺⼨, 也会按照设定的⽐例同步变化.


全部代码:

#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
#include <QGridLayout>
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");
    QPushButton* button4 = new QPushButton("按钮4");
    QPushButton* button5 = new QPushButton("按钮5");
    QPushButton* button6 = new QPushButton("按钮6");
    // 设置按钮的sizePolicy, 此时按钮的⽔平⽅向和垂直⽅向都会尽量舒展开
    button1->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
    button2->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
    button3->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
    button4->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
    button5->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
    button6->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);


    //创建网格布局
    QGridLayout* layout = new QGridLayout();
    layout->addWidget(button1,0,0);
    layout->addWidget(button2,0,1);
    layout->addWidget(button3,1,0);
    layout->addWidget(button4,1,1);
    layout->addWidget(button5,2,0);
    layout->addWidget(button6,2,1);

    //设置垂直拉伸比例
    layout->setRowStretch(0,1);
    layout->setRowStretch(1,2);
    layout->setRowStretch(2,3);


    //将layout设置到窗口上
    this->setLayout(layout);
}

Widget::~Widget()
{
    delete ui;
}

目录
相关文章
|
4月前
【qt】 QGridLayout布局管理器怎么用?
【qt】 QGridLayout布局管理器怎么用?
149 0
|
4月前
|
前端开发 程序员 API
【Qt】控件介绍
【Qt】控件介绍
|
4月前
|
开发者
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
209 4
|
4月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
766 4
|
4月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
284 3
|
4月前
|
数据可视化
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
84 3
|
4月前
|
网络协议 Linux C++
【Qt】多种控件实现“hello world“
【Qt】多种控件实现“hello world“
|
5月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
187 1
Qt(C++)开发一款图片防盗用水印制作小工具
|
4月前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
94 0