首页 > 其他分享 >Qt之格栅布局(QGridLayout)

Qt之格栅布局(QGridLayout)

时间:2023-05-19 14:47:07浏览次数:37  
标签:Qt int 布局 QGridLayout pLayout addWidget 之格

QGridLayout是Qt框架中的一个布局管理器类,用于将子部件按照网格方式排列。它是QLayout类的子类,可在水平和垂直方向上自动调整和布局子部件的位置和大小。

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

1. 网格布局:QGridLayout将子部件按照网格形式排列,每个子部件占据一个单元格。可以根据需要指定行数和列数,以决定网格的大小和布局。

2. 添加子部件:通过调用QGridLayout的addWidget()函数,可以向布局中添加子部件。可以指定子部件要放置在网格的哪一行和列上,并可以跨越多个行或列。

3. 对齐方式:可以使用setAlignment()函数设置子部件在网格单元格内的对齐方式。可以指定水平和垂直方向上的对齐方式,如左对齐、右对齐、居中等。

4. 弹性空间:QGridLayout支持弹性空间的概念。通过在网格中的行或列上添加弹性空间(setRowStretch()和setColumnStretch()),可以实现在布局中分配额外的空间或者平均分配剩余空间。

5. 跨越多个单元格:可以使用setSpan()函数将子部件跨越多个网格单元格。这对于需要占据多个单元格的大型部件或自定义布局非常有用。

6. 嵌套布局:QGridLayout可以与其他布局管理器一起使用,以实现更复杂的布局。可以将QGridLayout嵌套在其他布局管理器中,或者将其他布局管理器嵌套在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);
}

常用函数:

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

将窗口控件添加到布局中,这个单元将从row和column开始,扩展到rowSpan和columnSpan指定的倍数的行和列。如果rowSpan或columnSpan的值为-1,则窗口部件将扩展到布局的底部或者右边边缘处,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):可以设置水平间距

 

标签:Qt,int,布局,QGridLayout,pLayout,addWidget,之格
From: https://www.cnblogs.com/QingYiShouJiuRen/p/17415044.html

相关文章

  • 用Go语言连接和使用MQTT协议的设备
    在物联网领域,设备之间的通信是至关重要的。MQTT(MessageQueuingTelemetryTransport)作为一种轻量级的通信协议,被广泛应用于物联网设备之间的消息传输。本文将介绍如何使用Go语言连接和使用MQTT协议的设备,并提供一个使用Go语言编写的示例代码。Go语言作为一门高效、并发性强的编......
  • Qt之水平布局(QHBoxLayout)
    QHBoxLayout是Qt框架中的一个布局管理器类,用于水平排列子部件。它是QLayout类的子类,用于在水平方向上自动调整和布局子部件的位置和大小。以下是QHBoxLayout的一些特点和用法:1.水平布局:QHBoxLayout将子部件按照水平方向从左到右进行布局。它可以自动调整子部件的位置和大小,使它......
  • dbus -qt
    xml   D-Bus等价类型   Qt数据类型as   Arrayof[string]   QList<QString>a{sv}   dictofstring   QVariantMapa{sa{sv}}   dictofobjectpath   QMap<QString,QVariantMap>a{oa{sa{sv}}}   dictofobjectpath   QMap<QDBusObje......
  • Build QtAV
    gitaddr:https://github.com/wang-bin/QtAV UninstallQtAVSDKbeforebuildingtoavoidheaderfilesconfliction.Runsdk_uninstall.bat/shunderyourbuilddirShadowbuildisrecommended(requiredformacbuild).0.PrerequisitesGetQtAVsourcecodeu......
  • 在Linux的Ubuntu系统下安装QT及相关环境配置
    qt下载地址:http://download.qt.io/archive/qt/?tdsourcetag=s_pcqq_aiomsg 安装QT    从官网下载QT的安装包,在本地安装。本次使用的是Ubuntu18.06以及QT5.14.2,下文皆使用此版本作为示例。    首先安装QT,具体操作如下: 1、使用cd命令:cd/home/(usr)/download,切......
  • Docker 安装 MQTT(EMQX)
    Docker安装MQTT(EMQX)[root@localhost~]#dockerpullemqx:4.4.164.4.16:Pullingfromlibrary/emqx3f9582a2cbe7:Pullcomplete396ee3d6a271:Pullcompletef79aa88ad721:Pullcomplete8943a0bcb1f0:Pullcomplete66a2b18c61a7:PullcompleteDigest:sh......
  • 如何使用Go与MQTT进行通信
    简介本文介绍了如何使用Go编程语言与MQTT(MessageQueuingTelemetryTransport)进行通信。MQTT是一种轻量级的消息传输协议,广泛应用于物联网和实时通信场景。通过本文的指导,您将学习如何使用Go语言创建MQTT客户端,进行消息的发布和订阅。准备工作在开始之前,请确保您已完......
  • QT6 环境搭建和简单例子
    环境搭建$python-VPython3.9.16QT6需要Python3.7+以上版本。$python-mvenvenvqt6在这个命令中,参数-m表示执行模块的方式。它告诉Python解释器以模块的方式执行后面提供的参数。venv是一个Python模块,用于创建和管理虚拟环境。当你运行python-mv......
  • QT5 环境搭建和简单例子
    环境搭建$python-VPython3.9.16QT5需要Python3.7以上版本。$python-mvenvenvqt5在这个命令中,参数-m表示执行模块的方式。它告诉Python解释器以模块的方式执行后面提供的参数。venv是一个Python模块,用于创建和管理虚拟环境。当你运行python-mve......
  • 基于pyqt5的番剧推荐小程序
    本文只为技术分享,无其他用途前言:之前我完成了爬取番剧的爬虫实战,就想着基于爬取的数据,学习pyqt5做一个简易的窗口界面小程序,学的并不精深多有担待,以后技术精进了再优化优化。主要实现:分为主界面和另外3个副界面,main_window实现调用爬虫脚本初始化数据和跳转界面。random_windo......