QHBoxLayout 提供了一些方法,下面简单介绍一下常用方法
QVBoxLayout与QHBoxLayout使用类似,这里就不贴QVBoxLayout的代码了
QHBoxLayout常用方法
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主要作用是添加一个弹簧到布局内,这个弹簧是可以控制的
只需要在上面代码加入这行代码
加入后可以看到

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




3928

被折叠的 条评论
为什么被折叠?



