QGridLayout类

QGridLayout类在网格中布置控件。


Header:#include <QGridLayout>
CMake:find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake:QT += widgets
Inherits:<<< QLayout

【详细描述】

QGridLayout 将通过父布局 parent layout 或 parentWidget()提供给它的空间划分为行和列,并将其管理的每个控件放入对应的单元格。

行和列的行为相同且有等效的函数,这里我们只讨论列。

每列都有一个最小的宽度和一个拉伸系数。

 最小宽度 是“使用setColumnMinimumWidth()设置集合中的最大宽度”以及“该列中每个控件的最小宽度值”的较大值 。

 拉伸因子 以列为例,使用setColumnStretch()设置列拉伸,并确定列将获得多少可用空间,并超过其必要的最小值。

通常,每个控件widget或布局layout使用addWidget()放入自己的单元格中。一个控件也可以使用 addItem() 和addWidget() 跨越行和列以占用多个单元格。如果是这样,QGridLayout将基于拉伸系数来猜测如何在行列上分配大小。

removeWidget()用于从布局中删除控件。在控件上调用QWidget::hide()也会有效地从布局中删除控件,并能通过调用QWidget::show()重新显示。

下图对话框包含了一个5列3行的网格:

对话框切片中的第0、第2 和第4列各由一个QLabelQLineEdit,QListBox组成。第 0 行由三个QLabel组成,第 1 行由三个QLineEdit组成,第 2 行由三个QListBox组成。

第1和第3 列是用setColumnMinimumWidth()构成的占位符来获得列之间的适当空间。

请注意:列和行的宽度或高度均不相等。如果希望两列具有相同的宽度,必须使用setColumnMinimumWidth() 和 setColumnStretch() 自行设置它们的最小宽度和拉伸系数。

如果QGridLayout不是顶级布局(即并不管理控件的所有区域和子项),则必须在创建它时将其添加到其父布局中。添加的一般做法是在父布局上调用addLayout() 。

布局添加后,就可以开始使用 addWidget(), addItem()和addLayout()将控件和其他布局放入网格布局的单元格中了。

QGridLayout 还包括两个边距宽度:内容边距contents margin和 spacing()。

 内容边距 是沿着每个QGridLayout的四个边的保留空间的宽度。

spacing()  是相邻方框之间自动分配的间距的宽度。

默认内容边距值由style类提供。Qt styles指定的默认值为9px(子控件)和11px(窗口)。边距间距默认为与顶级布局的相同,或与父布局相同。

参见  QBoxLayoutQStackedLayoutLayout Management 和 Basic Layouts Example


【属性】

此属性保存并排布局的控件间距。如未显式设置,则布局的水平间距将从父布局或父构件的样式中继承。以下是访问函数:

inthorizontalSpacing() const
voidsetHorizontalSpacing(int spacing)

此属性保存垂直布局的控件间距。如果未显式设置,则布局的垂直间距将从父布局或父构件的样式设置继承。以下是访问函数:

intverticalSpacing() const
voidsetVerticalSpacing(int spacing)

【公有函数】

QGridLayout(QWidget *parent = nullptr)

在父控件parent构造一个新的QGridLayout,该布局最初只有一行一列,在插入新项目时将展开。

布局会直接设置为parent的顶级布局。一个widget只能有一个顶级布局,它由QWidget::layout()返回。

如果parent = nullptr,则必须将此QGridLayout插入到另一个layout中,或使用QWidget::setLayout()将其设置为控件布局。

virtual~QGridLayout()
voidaddItem(QLayoutItem *item, int row, int column, int rowSpan = 1, int columnSpan = 1, Qt::Alignment alignment = Qt::Alignment())

item项在row、column位置添加,跨越rowSpan行、columnSpan列,如果rowSpan 或 columnSpan 值设为 -1,则该项将分别延伸到底部或右边缘。新建item从属于当前布局。

voidaddLayout(QLayout *layout, int row, int column, Qt::Alignment alignment = Qt::Alignment())
layout放在网格的 (rowcolumn)位置,左上角的位置是(0, 0),对齐方式由alignment 指定,默认为0,表示新layout将填充整个单元格。非零对齐方式表示布局不应增长以填满可用空间,而应根据sizeHint()调整大小。新layout是当前网格布局的子项。
voidaddLayout(QLayout *layout, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())

此重载版本增加了跨越rowSpan行、columnSpan列参数,如果rowSpan 或 columnSpan 值设为 -1,则该项将分别延伸到底部或右边缘。其余同上。

voidaddWidget(QWidget *widget, int row, int column, Qt::Alignment alignment = Qt::Alignment())

将给定widget 添加到单元网格的rowcolumn处。默认左上角位置为(0, 0) 。

对齐方式由 alignment 指定。默认对齐为 0,表示控件将填充整个单元格。

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

此重载版本将给定widgetfromColumn、fromColumn 开始添加,跨越rowSpan行和columnSpan列。其余同上。

QRectcellRect(int row, int column) const
返回网格中row行和column列的单元格的几何形状。如果 row 或 column 位于网格之外,则返回无效的矩形。
intcolumnCount() const
返回此网格中的列数。
intcolumnMinimumWidth(int column) const
返回column列的列间距。
intcolumnStretch(int ) const
返回column列的拉伸系数。
voidgetItemPosition(int index, int *row, int *column, int *rowSpan, int *columnSpan) const

返回具有给定index项的位置。

作为rowcolumn传递的变量将随着项在布局中的位置而更新,而rowSpancolumnSpan变量将随着项目的垂直和水平跨度而更新。

inthorizontalSpacing() const
返回并排控件的水平间距。
QLayoutItem *itemAtPosition(int row, int column) const
返回布局中占用 (rowcolumn) 单元格的项,或者如果单元格为空,则返回nullptr。
Qt::CorneroriginCorner() const
返回用于网格原点的角,即位置(0, 0)。
introwCount() const
返回此网格中的行数。
introwMinimumHeight(int row) const
返回row行设置的最小宽度。
introwStretch(int row) const
返回row行的拉伸系数。
voidsetColumnMinimumWidth(int column, int minSize)
column列的最小宽度设置为minSize像素。
voidsetColumnStretch(int column, int stretch)

column列的拉伸系数设置为stretch

拉伸系数是相对于此网格中的其他列的,拉伸系数较高的列占用更多的可用空间。

第一列拉伸系数是0。默认拉伸系数为 0。如果拉伸系数为 0,并且此表中的其他列无法增长,该列仍可能会增长。

另一种方法是使用 addItem() 添加QSpacerItem增加间距。

voidsetHorizontalSpacing(int spacing)
设置并排控件的水平间距。
voidsetOriginCorner(Qt::Corner corner)
将网格的原点角,即位置 (0, 0),设置为corner
voidsetRowMinimumHeight(int row, int minSize)
row行的最小高度设置为minSize像素。
voidsetRowStretch(int row, int stretch)

row行的拉伸系数设为stretch

拉伸系数是相对于此网格中的其他行的,拉伸系数较高的行占用更多可用空间。

第一行拉伸系数是0,默认拉伸系数为 0。如果拉伸系数为 0,并且此表中的其他行无法增长,该行仍可能会增长。

voidsetVerticalSpacing(int spacing)
设置控件之间的垂直间距。
intverticalSpacing() const
返回控件之间的垂直间距。

【重实现的公有函数】

virtual intcount() const override

详见父类:

< QLayout

< QLayoutItem

virtual Qt::OrientationsexpandingDirections() const override
virtual boolhasHeightForWidth() const override
virtual intheightForWidth(int w) const override
virtual voidinvalidate() override
virtual QLayoutItem *itemAt(int index) const override
virtual QSizemaximumSize() const override
virtual intminimumHeightForWidth(int w) const override
virtual QSizeminimumSize() const override
virtual voidsetGeometry(const QRect &rect) override
virtual voidsetSpacing(int spacing) override
virtual QSizesizeHint() const override
virtual intspacing() const override
virtual QLayoutItem *takeAt(int index) override

【重新实现的受保护函数】

virtual voidaddItem(QLayoutItem *item) override实际程序中不会用此函数添加项。通常添加控件用 addWidget() ,添加布局用addLayout()。

<<< 返回上一级【QLayout类】

<<< 返回根页面

  • 27
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值