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

存在的问题

  • 目前的 GUI 开发方式:绝对定位
  • 问题:组件的位置和大小无法自适应窗口的变化

1、布局管理器(layout:布局)

— 能够自动排列窗口中的界面组件
— 窗口变化后自动更新界面组件的大小

  • QLayout 是 Qt 中布局管理器的抽象基类
  • 通过继承QLayout 实现功能各异且互补的布局管理器
  • Qt 中可以根据需要自定义布局管理器
  • 布局管理器不是界面组件,而是界面部件的定位策略(在界面中不可见,是窗口的帮手)
    在这里插入图片描述
    2、介绍
  • QBoxLayout 布局管理器
    — 以水平或垂直的方式管理界面组件
    在这里插入图片描述
    在这里插入图片描述
QVBoxLayout :长度在变化,高度没有变化

Widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>

class Widget : public QWidget
{
   
    Q_OBJECT

protected:
    QPushButton Btn1;
    QPushButton Btn2;
    QPushButton Btn3;
    QPushButton Btn4;

    void init();
    void testVBoxLayout();
    void testHBoxLayout();
    void testVHBoxLayout();

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
};
#endif

Widget.cpp

#include "Widget.h"
#include <QLayout>
#include <QBoxLayout>
#include <QVBoxLayout>
#include <QHBoxLayout>

Widget::Widget(QWidget *parent): QWidget(parent), Btn1(this), Btn2(this), Btn3(this), Btn4(this)
{
   
    //init();
    //testVBoxLayout();
    //testHBoxLayout();
    testVHBoxLayout();
}

void Widget::init()
{
   
    Btn1.setText("Test Button 1");
    Btn1.move(20,20);
    Btn1.resize(140,30);

    Btn2.setText("Test Button 2");
    Btn2.move(20,70);
    Btn2.resize(140,30);

    Btn3.setText("Test Button 3");
    Btn3.move(20,120);
    Btn3.resize(140,30);

    Btn4.setText("Test Button 4");
    Btn4.move(20,170);
    Btn4.resize(140,30);
}

void Widget::testVBoxLayout()
{
   
//这里的步骤在帮助文档里面都有

    QVBoxLayout* layout = new QVBoxLayout();                                //设置成垂直布局

    Btn1.setText("Test Button 1");
    Btn1.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);     //设置尺寸为随窗口变化
    Btn1.setMinimumSize(140, 30);                                           //设置按钮的最小尺寸

    Btn2.setText("Test Button 2");
    Btn2.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    Btn2.setMinimumSize(140, 30);

    Btn3.setText("Test Button 3");
    Btn3.setSizePolicy(QSizePolicy
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值