Qt布局管理器(QHBoxLayout,QVBoxLayout)

简介: Qt布局管理器(QHBoxLayout,QVBoxLayout)

提示:以下是本篇文章正文内容,下面案例可供参考

布局管理器是什么

可以把一些组件按一定的次序排列,这就是布局管理器。

他可以自动排列窗口中的界面组件

窗口变化后自动更新界面组件。

使用代码添加布局管理器

QVBoxLayout

e3bcd39101794b00bbbebb980906e5ad.png

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

c736ee72dd6a4786bbb829799582e6f0.png

他和QVBoxLayout基本一致,在这我就不讲了

使用ui文件添加布局管理器

1、把下列的组件拖出,把组件放在里面

28ba2b879af142c8a66c1209d4e7d84d.png

90fbe39c561545a1b2b93a23ffc32000.png2、点击按钮,排序某个Widget

先添加组件

首先选中你要排序的Widget

然后点击下面的东西:

547a3a8bca5e40debdab8a59ccc9e3df.png


想要不用也是很简单,选中指定的Widget,点击打破布局。

布局管理器的嵌套


c5f449b477db4bae9e48b040aa9e66ba.png

把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;
}


效果如下:


865445937be24788b335907864b9d010.png


相关文章
|
7天前
Qt 布局管理之 堆栈窗体
Qt 布局管理之 堆栈窗体
29 5
|
7天前
Qt 布局管理之 停靠窗口QDockWidget
Qt 布局管理之 停靠窗口QDockWidget
81 0
|
7天前
Qt 布局管理之分割窗口
Qt 布局管理之分割窗口
41 0
|
6月前
20 QT - 布局管理器概述
20 QT - 布局管理器概述
31 0
|
7天前
|
开发者
Qt 布局(QSplitter 类&QDockWidget 类) 总结
Qt 布局(QSplitter 类&QDockWidget 类) 总结
Qt 布局(QSplitter 类&QDockWidget 类) 总结
|
7天前
|
编译器 C语言 开发者
Qt Quick 常见控件与子控件布局规则
Qt Quick 常见控件与子控件布局规则
50 1
|
7天前
|
编解码 开发者 UED
Qt布局实战:实现高效、美观的GUI应用程序
Qt布局实战:实现高效、美观的GUI应用程序
215 2
|
7天前
使用代码实现QT自定义布局
使用代码实现QT自定义布局
|
7天前
|
容器
QT基础入门——界面布局和常用控件(四)
QT基础入门——界面布局和常用控件(四)
47 0
QT基础入门——界面布局和常用控件(四)