qt界面布局之水平布局与垂直布局(QHBoxLayout, QVBoxLayout)

本文介绍了QT界面布局中的QHBoxLayout和QVBoxLayout的使用,包括addWidget方法添加控件,addLayout方法添加布局,setSpacing设置控件间隙,setContentsMargins设置控件与布局边距,以及addStretch添加弹簧控制布局占比。通过实例代码展示了这些方法的应用。

QHBoxLayout 提供了一些方法,下面简单介绍一下常用方法
QVBoxLayout与QHBoxLayout使用类似,这里就不贴QVBoxLayout的代码了

addWidget 添加一个控件到layout

void addWidget(QWidget *, int stretch = 0, Qt::Alignment alignment = Qt::Alignment());
第一个参数可以传入一个QWidget的派生类指针类型(可以理解是待加入的控件地址)
第二个参数传入一个整型,这个整型是用来描述该控件在整个水平布局中所占比大小。
下面代码演示如何使用

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent)//, ui(new Ui::Widget)
{
    //ui->setupUi(this);

    //创建水平布局类
    Hlayout = new QHBoxLayout;

    //创建两个按钮方便观察
    btn1 = new QPushButton;
    btn1->setText("我是按钮1");

    btn2 = new QPushButton;
    btn2->setText("我是按钮2");

    //将按钮添加到界面布局
    Hlayout->addWidget(btn1);
    Hlayout->addWidget(btn2);

    //将当前窗口应用该布局
    this->setLayout(Hlayout);
}

Widget::~Widget()
{
    //delete ui;
    delete Hlayout;
    delete btn1;
    delete btn2;
}

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QHBoxLayout>
#include <QPushButton>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;
    QHBoxLayout *Hlayout;
    QPushButton *btn1;
    QPushButton *btn2;
};

#endif // WIDGET_H

在这里插入图片描述

我创建了两个按钮和一个水平布局,先看一下不加第二个参数的情况,他会默认为0,这时会按照相同比例来计算,如果想设置每个控件的占比,就需要将上面代码中的addwidget函数参数更改成这样

    Hlayout->addWidget(btn1, 5);
    Hlayout->addWidget(btn2, 1);

下面看代码和效果
在这里插入图片描述

addLayout 添加一个布局到layout

void addLayout(QLayout *layout, int stretch = 0);
第一个参数要传入待添加的布局
第二个参数和上面一样是该布局占比
如何使用看下面代码

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent)//, ui(new Ui::Widget)
{
    //ui->setupUi(this);

    //总布局
    mainlayout = new QHBoxLayout;

    //创建水平布局类
    Hlayout = new QHBoxLayout;

    //创建两个按钮方便观察
    btn1 = new QPushButton;
    btn1->setText("我是按钮1");

    btn2 = new QPushButton;
    btn2->setText("我是按钮2");

    //创建第三个按钮
    btn3 = new QPushButton;
    btn3->setText("我是按钮3");

    //将按钮添加到界面布局
    Hlayout->addWidget(btn1, 5);
    Hlayout->addWidget(btn2, 1);

    //添加布局和控件到主布局中
    mainlayout->addLayout(Hlayout, 2);
    mainlayout->addWidget(btn3, 5);


    //将当前窗口应用该布局
    this->setLayout(mainlayout);
}

Widget::~Widget()
{
    //delete ui;
    delete mainlayout;
    delete Hlayout;
    delete btn1;
    delete btn2;
    delete btn3;
}

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QHBoxLayout>
#include <QPushButton>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;
    QHBoxLayout *Hlayout;
    QHBoxLayout *mainlayout;
    QPushButton *btn1;
    QPushButton *btn2;
    QPushButton *btn3;
};

#endif // WIDGET_H

在这里插入图片描述

可以看到布局和按钮都可以按照比例去添加到主布局中
但是图片中所有控件之间有一些小间隙,我想控制这些小间隙
在这里插入图片描述

setSpacing 设置layout中每个控件的间隙

void setSpacing(int spacing);
第一个参数是设置空隙的大小(单位像素)
setSpacing是设置控件与控件间隙

setContentsMargins 设置layout中每个控件与layout边框之间距离

void setContentsMargins(int left, int top, int right, int bottom);
这四个参数分别是该布局内控件距离布局的边缘间距,分别是上下左右边框(是控件距离布局的边缘的间距)
setContentsMargins是设置控件与布局边框的间隙

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent)//, ui(new Ui::Widget)
{
    //ui->setupUi(this);

    //创建水平布局类
    Hlayout = new QHBoxLayout;

    //创建两个按钮方便观察
    btn1 = new QPushButton;
    btn1->setText("我是按钮1");

    btn2 = new QPushButton;
    btn2->setText("我是按钮2");

    //将按钮添加到界面布局
    Hlayout->addWidget(btn1, 5);
    Hlayout->addWidget(btn2, 1);
    Hlayout->setSpacing(0);
    Hlayout->setContentsMargins(0, 0, 0, 0);

    //将当前窗口应用该布局
    this->setLayout(Hlayout);
}

Widget::~Widget()
{
    //delete ui;
    delete Hlayout;
    delete btn1;
    delete btn2;
}

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QHBoxLayout>
#include <QPushButton>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;
    QHBoxLayout *Hlayout;
    QPushButton *btn1;
    QPushButton *btn2;
};

#endif // WIDGET_H

在这里插入图片描述

addStretch 添加一个弹簧到layout中

void addStretch(int stretch = 0);
第一个参数是添加弹簧在控件中的占比
addStretch主要作用是添加一个弹簧到布局内,这个弹簧是可以控制的
只需要在上面代码加入这行代码
在这里插入图片描述
加入后可以看到
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

到达想去的地方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值