qt 布局gridlayout_Qt零基础系列06:如何进行界面布局管理

本文介绍了Qt中的四种常见布局管理器:QBoxLayout(包括水平和垂直布局)、QGridLayout、QFormLayout和QStackedLayout。通过实例展示了如何使用这些布局管理器进行界面设计,并讨论了如何设置布局间距、添加占位符、调整边界距离等。此外,还简要提到了页面分割、滚动区域和停靠窗口的使用。
摘要由CSDN通过智能技术生成

62f9edc188472b9f3f969e1478ade83f.png

内容提要:

介绍Qt页面布局中,QBoxLayout,QGridLayout,QFormLayout,QStackedLayout等4种常用的布局管理器,以及一些布局中常用的操作

主要内容:

f6bfdfd063a3b3055da6a12126d1ff31.png

详细内容:

1.Qt页面管理器

在开发Qt应用程序时,为了程序上组件布局的美观,所以要给每个组件设定一个合适的大小和位置。用户在使用我们开发的程序的时候,会自己调整页面的大小,因此还需要再用户调整界面大小的时候,组件能够根据程序页面的调整,做出组件尺寸和组件内容大小的自适应调整,从而保证程序页面不会产生变形。

Qt提供了4种用于页面布局的类:QBoxLayout,QGridLayout,QFormLayout,QStackedLayout。


1.1 QBoxLayout

QBoxLayout类有两个子类,水平布局管理器 QHBoxLayout 和 垂直布局管理器 QVBoxLayout。下面演示一下如何使用这两个类进行页面布局。

step1 创建一个新项目,项目名称myQBoxLayout,基类为Qwidget

f2310f3fc7590d620b4d9c6a262a0112.png

6888d27cf8f00cab4d7312540f0d094e.png

step2 在 widget.h 文件中,添加如下代码

#include <QPushButton>      // 用于创建按钮的类
#include <QHBoxLayout>      // 用于水平布局的类

声明按钮,用于演示水平布局

private:
    QPushButton *button1;       // 声明按钮1
    QPushButton *button2;       // 声明按钮2
    QPushButton *button3;       // 声明按钮3
    QPushButton *button4;       // 声明按钮4
    QPushButton *button5;       // 声明按钮5

90891fb98ccca5b1ff9adbbb393f57b4.png

step3 在 widget.cpp 文件中,添加如下代码

    // 创建按钮1
    button1 = new QPushButton("One");
    // 创建按钮2
    button2 = new QPushButton("Two");
    // 创建按钮3
    button3 = new QPushButton("Three");
    // 创建按钮4
    button4 = new QPushButton("Four");
    // 创建按钮5
    button5 = new QPushButton("Five");

    // 创建水平页面布局管理对象
    QHBoxLayout *hlayout = new QHBoxLayout;
    // 向水平布局增加 按钮1
    hlayout->addWidget(button1);
    // 向水平布局增加 按钮2
    hlayout->addWidget(button2);
    // 向水平布局增加 按钮3
    hlayout->addWidget(button3);
    // 向水平布局增加 按钮4
    hlayout->addWidget(button4);
    // 向水平布局增加 按钮5
    hlayout->addWidget(button5);
    // 设置水平页面布局是窗口布局
    this->setLayout(hlayout);

4709569fe28042a2146128fe49fa831e.png

step4 Ctrl+r 运行程序,观察页面布局,试着拉大或者缩小窗口,观察按钮的变化

a4b0b81236912d13f2649abf03414b28.png

可以看出使用QHBoxLayout布局后,调整窗口大小是,按钮的尺寸也会自动调整,但是有个问题,这个界面太大了,不需要这么大,那有什么办法可以让这个界面自动调整到合适的尺寸呢?答案是有的,我们可以添加如下代码,然后再运行程序看看效果。

    // 设置窗口为固定尺寸,sizeHint()函数的作用是保持窗口为理想大小的尺寸
    this->setFixedSize(sizeHint()); // 设置后页面大小不可调整,一直处于系统推荐大小的状态

c455d69b456bbd79e3c60d7de919ad89.png

step5 在 widget.h 文件中,添加如下代码

#include <QVBoxLayout>      // 用于垂直布局的类

声明按钮,用于演示垂直布局

private:
    QPushButton *button6;       // 声明按钮6
    QPushButton *button7;       // 声明按钮7
    QPushButton *button8;       // 声明按钮8
    QPushButton *button9;       // 声明按钮9
    QPushButton *button10;      // 声明按钮10

bceba45e05515ffcd1a357a88128d471.png

step6 在 widget.cpp 文件中,添加如下代码

    // 创建按钮6
    button6 = new QPushButton("Six");
    // 创建按钮7
    button7 = new QPushButton("Seven");
    // 创建按钮8
    button8 = new QPushButton("Eight");
    // 创建按钮9
    button9 = new QPushButton("Nine");
    // 创建按钮10
    button10 = new QPushButton("Ten");

    // [2]创建垂直页面布局管理对象
    QVBoxLayout *vlayout = new QVBoxLayout;
    // 向水平布局增加 按钮6
    vlayout->addWidget(button6);
    // 向水平布局增加 按钮7
    vlayout->addWidget(button7);
    // 向水平布局增加 按钮8
    vlayout->addWidget(button8);
    // 向水平布局增加 按钮9
    vlayout->addWidget(button9);
    // 向水平布局增加 按钮10
    vlayout->addWidget(button10);

    // [3]创建垂直页面布局管理对象
    QVBoxLayout *layout = new QVBoxLayout;
    layout->addLayout(hlayout);
    layout->addLayout(vlayout);

3bf2540076211706e1523c47859bc2b4.png

程序里面创建了3个页面布局管理对象,他们之间的关系可以用下图来表示,页面布局中,经常会用到类似这种嵌套布局的情况,所以要多多练习

9ece25656c4e908101b3d43afe451cc5.png

step7 Ctrl+r 运行程序,观察页面布局

6435970ceb6b3c553acab981c971910a.png

除此之外还有三个函数比较常用,QBoxLayout::setSpacing(int spacing)设置组件之间的间隔,QBoxLayout::addStretch(int stretch = 0)设置一个占位空间,void QLayout::setContentsMargins(int left, int top, int right, int bottom)设置布局管理器到边界的距离。

使用演示:设置组件间隔,在 widget.cpp 增加如下代码,然后运行程序,观察按钮1~5之间的间隔是否发生变化

    // 演示水平布局之间增加间隔
    hlayout->setSpacing(20);

924f37174283627ed58405e66878f90e.png

b4623e10eb9c0897ec63e7edbe55e4ff.png

使用演示:增加一个组件占位,在 widget.cpp 增加如下代码,然后运行程序,观察按钮6~10之间的变化

    // 演示在按钮之间增加一个占位
    vlayout->addStretch();

并注释代码,否则观察不到占位效果

//    this->setFixedSize(sizeHint()); // 设置后页面大小不可调整,一直处于系统推荐大小的状态
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值