文章目录
- 布局管理器是什么
- 使用代码添加布局管理器
- QVBoxLayout
- QHBoxLayout
- 使用ui文件添加布局管理器
- 布局管理器的嵌套
提示:以下是本篇文章正文内容,下面案例可供参考
布局管理器是什么
可以把一些组件按一定的次序排列,这就是布局管理器。
他可以自动排列窗口中的界面组件
窗口变化后自动更新界面组件。
使用代码添加布局管理器
QVBoxLayout
QVBoxLayout:按垂直的顺序排列组件
添加组件/其他的布局管理器:
addWidget(QWidget*);
addLayout(Layout*);
设置布局管理器管理指定窗口:
Widget->setLayout(Layout*);
设置组件和窗口一起变大变小:
QWidget->setSizePolicy();
大家可以查帮助文档,我现在列出一部分
QSizePolicy::Fixed
QSizePolicy::Minimum
QSizePolicy::Maximum
QSizePolicy::Preferred
QSizePolicy::Expanding
设置组件的间隔:
setSpacing(int)
设置组件的比例因子:
setStretch(int index,int stretch)
使用部分:
//构造函数:
Form::Form(QWidget *parent) :
QWidget(parent),btn0(this),btn1(this),btn2(this),
ui(new Ui::Form)
{
ui->setupUi(this);
QVBoxLayout *layout = new QVBoxLayout(this);
btn0.setText("Button 0");
btn1.setText("Button 1");
btn2.setText("Button 2");
btn0.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
btn1.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
btn2.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
layout->setSpacing(10);
layout->addWidget(&btn0);
layout->addWidget(&btn1);
layout->addWidget(&btn2);
setLayout(layout);
}
//头文件:
#ifndef FORM_H
#define FORM_H
#include <QWidget>
#include <QPushButton>
namespace Ui {
class Form;
}
class Form : public QWidget
{
Q_OBJECT
QPushButton btn0;
QPushButton btn1;
QPushButton btn2;
public:
explicit Form(QWidget *parent = 0);
~Form();
private:
Ui::Form *ui;
private slots:
};
#endif // FORM_H
QHBoxLayout
他和QVBoxLayout基本一致,在这我就不讲了
使用ui文件添加布局管理器
1、把下列的组件拖出,把组件放在里面
2、点击按钮,排序某个Widget
先添加组件
首先选中你要排序的Widget
然后点击下面的东西:
想要不用也是很简单,选中指定的Widget,点击打破布局。
布局管理器的嵌套
把QHbox放到QVbox中,组成一个网格布局。
代码如下:
//Widget,h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPushButton>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
QPushButton btn0;
QPushButton btn1;
QPushButton btn2;
QPushButton btn3;
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
//Widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QVBoxLayout *layout = new QVBoxLayout(this);
QHBoxLayout *hbox1 = new QHBoxLayout(this);
QHBoxLayout *hbox2 = new QHBoxLayout(this);
btn0.setText("Button 0");
btn1.setText("Button 1");
btn2.setText("Button 2");
btn3.setText("Button 3");
btn0.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
btn1.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
btn2.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
btn3.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
layout->addLayout(hbox1);
layout->addLayout(hbox2);
hbox1->addWidget(&btn0);
hbox1->addWidget(&btn1);
hbox2->addWidget(&btn2);
hbox2->addWidget(&btn3);
setLayout(layout);
}
Widget::~Widget()
{
delete ui;
}
效果如下: