QT布局管理器

 1.作用
            在水平/垂直方向上让ui中的组件可以对齐

   2.三种常用的布局管理器
              水平布局管理器:QHBoxLayout   在水平方向对齐组件
              垂直布局管理器:QVBoxLayout   在垂直方向对齐组件
              网格(栅格)布局管理器:QGridLayout   可以把布局好的界面嵌套到主窗口中(点击主窗口,然后选择栅格布局)

   3.常用技巧
           (1)如何让组件大小固定
                   修改属性:minimumsize  //最小尺寸
                                    maxmumsize  //最大尺寸
                   最小最大尺寸一样--》组件就固定死了,最大和最小尺寸决定了组件变化
          (2)使用分隔器
                   水平和垂直分隔器,可以把组件在水平/垂直方向间距自由拉伸

   4.代码实现布局(以布局登录界面为例)
            第一步:定义水平布局管理器--》把登录和注册按钮在水平方向上对齐
                        QHBoxLayout(QWidget *parent)   //构造函数
                                   参数:parent --》父窗口this
                        void QBoxLayout::addWidget(QWidget *widget)   //把你要水平对齐的组件作为参数添加到水平布局管理器
                                   参数:  widget --》你要添加进来的组件(登录和注册按钮)
                        void QBoxLayout::addStretch(int stretch = 0)
                                   参数:  stretch --》伸缩量,按照比例把空白部分分开

           第二步:定义垂直布局管理器
                        QVBoxLayout(QWidget *parent)    //构造函数
                        void QBoxLayout::addWidget(QWidget *widget)   //把你要垂直对齐的组件作为参数添加到垂直布局管理器
                                   参数:  widget --》你要添加进来的组件
                        void QBoxLayout::addLayout(QLayout *layout)    //把另外一个布局管理器添加到当前布局管理器中
                                   参数:layout --》你要添加进来的布局管理器
                                             QLayout是水平,垂直,栅格它们的父类
     遇到的问题
                 问题一:  QHBoxLayout *hlayout=new QHBoxLayout(this); //错误的,布局管理器不能作用于主窗口this
                 问题二:  最顶层的布局管理器必须作用于中心窗口区域
                                什么是最顶层的布局管理器?
                                             一个布局管理器包含了其它所有的组件和布局管理器,这个就是最顶层的
 

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QGridLayout>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //创建网格布局管理器对象
    QGridLayout *glayout=new QGridLayout(ui->centralwidget);
    //把三个按钮添加进来
    //glayout->addWidget(ui->pushButton,0,0);
    //glayout->addWidget(ui->pushButton_2,0,1);
    //glayout->addWidget(ui->pushButton_3,0,2);

    //把三个按钮添加进来
    //glayout->addWidget(ui->pushButton,0,0);
    //glayout->addWidget(ui->pushButton_2,1,0);
    //glayout->addWidget(ui->pushButton_3,2,0);

    //把三个按钮添加进来
    glayout->addWidget(ui->pushButton,0,0);
    glayout->addWidget(ui->pushButton_2,0,1);
    glayout->addWidget(ui->pushButton_3,1,0);
}

MainWindow::~MainWindow()
{
    delete ui;
}

 

#include "loginwin.h"
#include "ui_loginwin.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
loginwin::loginwin(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::loginwin)
{
    ui->setupUi(this);
    //创建一个水平布局管理器对象
    QHBoxLayout *hlayout=new QHBoxLayout();
    //把登录按钮和注册按钮添加到水平布局管理器中
    hlayout->addWidget(ui->pushButton);
    hlayout->addWidget(ui->pushButton_2);

    //创建一个垂直布局管理器
    QVBoxLayout *vlayout=new QVBoxLayout(ui->centralwidget);
    //把标签,两个输入框,以及刚才布局好的水平布局管理器添加到垂直布局管理器里面
    vlayout->addWidget(ui->label);
    vlayout->addWidget(ui->lineEdit);
    vlayout->addWidget(ui->lineEdit_2);
    vlayout->addLayout(hlayout);  //把刚才的水平布局管理器添加进来

}

loginwin::~loginwin()
{
    delete ui;
}
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QHBoxLayout>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //创建一个水平布局管理器
    QHBoxLayout *hlayout=new QHBoxLayout(ui->centralwidget);
    hlayout->addStretch(1);
    hlayout->addWidget(ui->pushButton);
    hlayout->addStretch(1);
    hlayout->addWidget(ui->pushButton_2);
    hlayout->addStretch(1);
}

MainWindow::~MainWindow()
{
    delete ui;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hqb_newfarmer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值