1、布局管理器(layout:布局)
— 能够自动排列窗口中的界面组件
— 窗口变化后自动更新界面组件的大小
QLayout
是 Qt 中布局管理器的抽象基类- 通过继承
QLayout
实现功能各异且互补的布局管理器 - Qt 中可以根据需要自定义布局管理器
- 布局管理器不是界面组件,而是界面部件的定位策略(在界面中不可见,是窗口的帮手)
2、介绍 QBoxLayout
布局管理器
— 以水平或垂直的方式管理界面组件
QVBoxLayout :长度在变化,高度没有变化
Widget.h
#ifndef _WIDGET_H_
#define _WIDGET_H_
#include <QWidget>
#include <QPushButton>
#include <QDebug>
class Widget : public QWidget
{
Q_OBJECT
private:
QPushButton TestBtn1;
QPushButton TestBtn2;
QPushButton TestBtn3;
QPushButton TestBtn4;
void initControl();
void testVBoxLayout();
void testHBoxLayout();
void testBoxLayout();
public:
explicit Widget(QWidget *parent = 0);
signals:
public slots:
};
#endif
Widget.cpp
#include "Widget.h"
#include <QLayout>
#include <QBoxLayout>
#include <QVBoxLayout>
#include <QHBoxLayout>
Widget::Widget(QWidget *parent) : QWidget(parent),
TestBtn1(this),TestBtn2(this),TestBtn3(this),TestBtn4(this)
{
//initControl();
//testVBoxLayout();
//testHBoxLayout();
tesVHBoxLayout();
}
void Widget::testVHBoxLayout()
{
QHBoxLayout* hlayout1 = new QHBoxLayout();
TestBtn1.setText("Test button 1");
TestBtn1.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
TestBtn1.setMinimumSize(140,30);
hlayout1->addWidget(&TestBtn1);
TestBtn2.setText("Test button 2");
TestBtn2.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
TestBtn2.setMinimumSize(140,30);
hlayout1->addWidget(&TestBtn2);
QHBoxLayout* hlayout2 = new QHBoxLayout();
TestBtn3.setText("Test button 3");
TestBtn3.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
TestBtn3.setMinimumSize(140,30);
hlayout2->addWidget(&TestBtn3);
TestBtn4.setText("Test button 4");
TestBtn4.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
TestBtn4.setMinimumSize(140,30);
hlayout2->addWidget(&TestBtn4);
QVBoxLayout* vlayout = new QVBoxLayout();
vlayout->addLayout(hlayout1);
vlayout->addLayout(hlayout2);
setLayout(vlayout); //设置布局管理器,由下至上去看就一目了然
}
void Widget::testHBoxLayout()
{
QHBoxLayout* layout = new QHBoxLayout();
TestBtn1.setText("Test button 1");
TestBtn1.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
TestBtn1.setMinimumSize(140,30);
TestBtn2.setText("Test button 2");
TestBtn2.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
TestBtn2.setMinimumSize(140,30);
TestBtn3.setText("Test button 3");
TestBtn3.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
TestBtn3.setMinimumSize(140,30);
TestBtn4.setText("Test button 4");
TestBtn4.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
TestBtn4.setMinimumSize(140,30);
layout->addWidget(&TestBtn1);
layout->addWidget(&TestBtn2);
layout->addWidget(&TestBtn3);
layout->addWidget(&TestBtn4);
layout->setSpacing(30);
setLayout(layout); //设置布局管理器
}
void Widget::testVBoxLayout()
{
QVBoxLayout* layout = new QVBoxLayout();
TestBtn1.setText("Test button 1");
TestBtn1.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
TestBtn1.setMinimumSize(140,30);
TestBtn2.setText("Test button 2");
TestBtn2.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
TestBtn2.setMinimumSize(140,30);
TestBtn3.setText("Test button 3");
TestBtn3.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
TestBtn3.setMinimumSize(140,30);
TestBtn4.setText("Test button 4");
TestBtn4.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
TestBtn4.setMinimumSize(140,30);
layout->addWidget(&TestBtn1);
layout->addWidget(&TestBtn2);
layout->addWidget(&TestBtn3);
layout->addWidget(&TestBtn4);
layout->setSpacing(30);
setLayout(layout);
}
void Widget::initControl()
{
TestBtn1.setText("Test button 1");
TestBtn1.move(20,20);
TestBtn1.resize(140,30);
TestBtn2.setText("Test button 2");
TestBtn2.move(20,70);
TestBtn2.resize(140,30);
TestBtn3.setText("Test button 3");
TestBtn3.move(20,120);
TestBtn3.resize(140,30);
TestBtn4.setText("Test button 4");
TestBtn4.move(20,170);
TestBtn4.resize(140,30);
//setFixedSize(180,220);
}
来源:CSDN
作者:Do better yeah!
链接:https://blog.csdn.net/qq_35379003/article/details/103498941