Qt开发:格栅布局(QGridLayout)

一、QGridLayout介绍

QGridLayout是Qt框架中的一个布局管理器类,用于将子部件按照网格方式排列。它是QLayout类的子类,可在水平和垂直方向上自动调整和布局子部件的位置和大小。QGridLayout 将界面划分为若干“行”和“列”,你可以指定每个控件放在哪个位置(第几行、第几列),并可以设置控件跨越的行数和列数。它会自动管理控件的对齐、间距和缩放。

二、QGridLayout常用函数

将窗口控件添加到布局中,这个单元将从row和column开始,扩展到rowSpan和columnSpan指定的倍数的行和列。如果rowSpan或columnSpan的值为-1,则窗口部件将扩展到布局的底部或者右边边缘处,Qt::Alignment为对齐方式。

void QGridLayout::addWidget(QWidget *widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment  alignment = Qt::Alignment())

设置置行/列的伸缩空间

void QGridLayout::setRowStretch(int row, int stretch)
void QGridLayout::setColumnStretch(int column, int stretch)

可以用于同时设置水平、垂直间距,设置之后,水平、垂直间距相同。

void setSpacing(int spacing):setSpacing()

设置垂直间距

void setVerticalSpacing(int spacing)

设置水平间距

void setHorizontalSpacing(int spacing)

三、QGridLayout的用法

以下是QGridLayout的一些特点和用法:

1.格布局:QGridLayout将子部件按照网格形式排列,每个子部件占据一个单元格。可以根据需要指定行数和列数,以决定网格的大小和布局。
2.添加子部件:通过调用QGridLayout的addWidget()函数,可以向布局中添加子部件。可以指定子部件要放置在网格的哪一行和列上,并可以跨越多个行或列。
3.对齐方式:可以使用setAlignment()函数设置子部件在网格单元格内的对齐方式。可以指定水平和垂直方向上的对齐方式,如左对齐、右对齐、居中等。
4.弹性空间:QGridLayout支持弹性空间的概念。通过在网格中的行或列上添加弹性空间(setRowStretch()和setColumnStretch()),可以实现在布局中分配额外的空间或者平均分配剩余空间。
5.跨越多个单元格:可以使用setSpan()函数将子部件跨越多个网格单元格。这对于需要占据多个单元格的大型部件或自定义布局非常有用。
6.嵌套布局:QGridLayout可以与其他布局管理器一起使用,以实现更复杂的布局。可以将QGridLayout嵌套在其他布局管理器中,或者将其他布局管理器嵌套在QGridLayout中,以实现各种布局组合。
7.使用QGridLayout可以轻松创建灵活的网格布局,适用于多种类型的界面。它提供了方便和强大的方式来管理和调整子部件的位置和大小,并且支持灵活的行和列布局控制。

QGridLayout布局示例如下:
在这里插入图片描述

#include "main_window.h"

MainWindow::MainWindow(QWidget *parent)
    : QWidget(parent)
{
    m_pImageLabel = new QLabel(this);
    m_pImageLabel->setFixedSize(90, 90);
    m_pImageLabel->setScaledContents(true);

    QPixmap pixmap("./images/logo.jpg");
    m_pImageLabel->setPixmap(pixmap);

    m_pUserEdit = new QLineEdit(this);
    m_pUserEdit->setPlaceholderText("用户名");

    m_pPasswordEdit = new QLineEdit(this);
    m_pPasswordEdit->setPlaceholderText("密码");
    m_pPasswordEdit->setEchoMode(QLineEdit::Password);

    m_pRemberCheck = new QCheckBox(this);
    m_pRemberCheck->setText("记住密码");

    m_pAutoLoginCheck = new QCheckBox(this);
    m_pAutoLoginCheck->setText("自动登陆");

    m_pLoginButton = new QPushButton(this);
    m_pLoginButton->setText("登陆");

    m_pRegisterButton = new QPushButton(this);
    m_pRegisterButton->setText("注册账号");

    m_pForgotButton = new QPushButton(this);
    m_pForgotButton->setText("找回密码");

    QGridLayout *pLayout = new QGridLayout(this);
    /* 图片在第0行,从第0行开始,占3行1列 */
    pLayout->addWidget(m_pImageLabel, 0, 0, 3, 1);
    /* 用户输入框第0行,从第1列开始,占1行2列 */
    pLayout->addWidget(m_pUserEdit, 0, 1, 1, 2);
    pLayout->addWidget(m_pRegisterButton, 0, 4);
    /* 密码输入框第1行,从第1行开始,占1行2列 */
    pLayout->addWidget(m_pPasswordEdit, 1, 1, 1, 2);
    pLayout->addWidget(m_pForgotButton, 1, 4);
    /* 记住密码 第2行,第1列开始,占1行1列 水平居左,垂直居中 */
    pLayout->addWidget(m_pRemberCheck, 2, 1, 1, 1, Qt::AlignLeft | Qt::AlignVCenter);
    /* 自动等罗 第2行,从第2列开始,占1行1列,水平居左,垂直居中 */
    pLayout->addWidget(m_pAutoLoginCheck, 2, 2, 1, 1, Qt::AlignLeft | Qt::AlignVCenter);
    /* 登陆按钮 第3行,第1列开始,占1行2列 */
    pLayout->addWidget(m_pLoginButton, 3, 1, 1, 2);
    /* 设置水平间距 */
    pLayout->setHorizontalSpacing(10);
    /* 设置垂直间距 */
    pLayout->setVerticalSpacing(10);
    /* 设置外间距 */
    pLayout->setContentsMargins(10, 10, 10, 10);

    this->setLayout(pLayout);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值