Qt 第14课、布局管理器(一)

ぃ、小莉子 提交于 2019-12-11 20:41:24

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!