Qt入门 --- QGridLayout、QHBoxLayout、QVBoxLayout三种常用的布局方式

Qt的布局是通过布局管理器来实现的,布局管理器负责在父类窗口部件区域构建子窗口部件,使得放置在窗体中的每个窗口部件都有一个适合的大小和位置,并且能够随着应用程序本身的变化而变化从而达到不改变整体的布局的结构的效果。

Qt常用的三种布局类如下:
(1)QHBoxLayout:水平布局
(2)QVBoxLayout:垂直布局
(3)QGridLayout:网格布局
这三种方法可以嵌套使用。
关系如下:在这里插入图片描述

常用的方法有两种:
(1)addWidget():用于在布局中插入控件
(2)addLayout():用于在布局中插入子布局

水平布局管理器可以把它所管理的部件以水平的顺序依次排开,如下图所示:
在这里插入图片描述
垂直管理器类似与水平管理器,把它所管理的部件以垂直的顺序依次排开,如下图所示:
在这里插入图片描述
网格布局管理器可以以网格的形式,将它所管理的部件以一定的矩阵形式排列,如下图所示
在这里插入图片描述
mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>
#include <QGridLayout>
#include <QHBoxLayout>
#include <QVBoxLayout>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    QPushButton *btn1;
    QPushButton *btn2;
    QPushButton *btn3;
    QPushButton *btn4;
    QPushButton *btn5;
    QPushButton *btn6;
    QPushButton *btn7;
    QPushButton *btn8;
};

#endif // MAINWINDOW_H

//**************************************************************************************
mainwindow.cpp

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    QWidget *widget=new QWidget;//构建一个QWidget布局将设置的布局添加进这个QWidget
    this->setCentralWidget(widget);
     
    //初始化按钮
    btn1=new QPushButton("1");
    btn2=new QPushButton("2");
    btn3=new QPushButton("3");
    btn4=new QPushButton("4");
    btn5=new QPushButton("5");
    btn6=new QPushButton("6");
    btn7=new QPushButton("7");
    btn8=new QPushButton("8");

    QGridLayout *mainLayout=new QGridLayout;//网格布局
    QHBoxLayout *leftLayout=new QHBoxLayout;//水平布局
    QVBoxLayout *rightLayout=new QVBoxLayout;//垂直布局
    QGridLayout *downLayout=new QGridLayout;

    //按钮1和按钮2以水平布局方式从左至右排列
    leftLayout->addWidget(btn1);
    leftLayout->addWidget(btn2);

    //按钮3和按钮4以垂直布局方式从上至下排列
    rightLayout->addWidget(btn3);
    rightLayout->addWidget(btn4);

    //按钮5、按钮6、按钮7和按钮8以网格布局方式按坐标排列
    downLayout->addWidget(btn5,0,0);
    downLayout->addWidget(btn6,0,1);
    downLayout->addWidget(btn7,1,0);
    downLayout->addWidget(btn8,1,1);

    //将以上三个子布局以网格布局方式按坐标排列
    mainLayout->addLayout(leftLayout,0,0);
    mainLayout->addLayout(rightLayout,0,1);
    mainLayout->addLayout(downLayout,1,1);

    widget->setLayout(mainLayout);//将布局显示出来
}

MainWindow::~MainWindow()
{

}

//***************************************************************************************
main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

//**************************************************************************************
编译运行,界面如下图所示:
在这里插入图片描述
该界面时1、2按钮为一个子布局(水平类),3,4按钮为一个子布局(垂直类),5、6、7、8为一个子布局(网格类),然后将这三个子布局放入整体布局中。

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在PyQt5中,布局管理器是用于管理和排列窗口中的控件的类。下面我们详细介绍QHBoxLayout、QVBoxLayout、QGridLayout、QFormLayout和QStackedLayout类的具体用法和原理,以及它们的一些常用内置函数。 1. QHBoxLayout(水平布局): - 用法:将控件按照水平方向依次排列。 - 内置函数: - addWidget(widget, stretch=0, alignment=Qt.Alignment):向布局添加控件,并指定控件的拉伸因子和对齐方式。 - addSpacing(space):在布局中添加指定大小的空白间隔。 - addStretch(stretch=0):在布局中添加指定大小的可伸缩空间。 - insertSpacing(index, space):在指定位置插入指定大小的空白间隔。 - insertStretch(index, stretch=0):在指定位置插入指定大小的可伸缩空间。 2. QVBoxLayout(垂直布局): - 用法:将控件按照垂直方向依次排列。 - 内置函数与QHBoxLayout相似,只是排列方向不同。 3. QGridLayout(网格布局): - 用法:将控件放置在一个网格中,按照行和列进行排列。 - 内置函数: - addWidget(widget, row, column, rowspan=1, colspan=1, alignment=Qt.Alignment):向布局添加控件,并指定其在网格布局中的位置、跨行列的数量和对齐方式。 - addLayout(layout, row, column, rowspan=1, colspan=1, alignment=Qt.Alignment):向布局添加子布局,并指定其在网格布局中的位置、跨行列的数量和对齐方式。 - setRowStretch(row, stretch):设置指定行的可伸缩空间。 - setColumnStretch(column, stretch):设置指定列的可伸缩空间。 4. QFormLayout(表单布局): - 用法:用于创建表单界面,将标签和输入控件组合在一起。 - 内置函数: - addRow(label, field):添加一行标签和输入控件。 - setAlignment(label, alignment):设置标签的对齐方式。 - setFormAlignment(alignment):设置表单布局中所有标签的对齐方式。 5. QStackedLayout(堆叠布局): - 用法:用于在同一位置堆叠多个控件,只显示其中一个。 - 内置函数: - addWidget(widget):向布局添加控件。 - insertWidget(index, widget):在指定位置插入控件。 - setCurrentIndex(index):设置当前显示的控件索引。 - currentWidget() -> QWidget:返回当前显示的控件。 这些布局管理器类的原理是通过计算和调整控件的位置和大小来实现自动适应窗口大小的布局效果。它们会根据不同的排列方向、行列数等参数,将控件摆放在正确的位置。通过设置拉伸因子、间隔、可伸缩空间等属性,可以调整控件的尺寸和位置关系。 总结起来,我们可以根据界面的布局需求选择合适的布局管理器,并使用其内置函数来添加和调整控件。这样可以方便地实现灵活且自适应的界面布局
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值