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