QGridLayout Class

QGridLayout 类在网格中布局部件。更多

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

属性

公共函数

QGridLayout(QWidget *parent = nullptr)
virtual ~QGridLayout()
void addItem(QLayoutItem *item, int row, int column, int rowSpan = 1, int columnSpan = 1, Qt::Alignment alignment = Qt::Alignment())
void addLayout(QLayout *layout, int row, int column, Qt::Alignment alignment = Qt::Alignment())
void addLayout(QLayout *layout, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())
void addWidget(QWidget *widget, int row, int column, Qt::Alignment alignment = Qt::Alignment())
void addWidget(QWidget *widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())
QRect cellRect(int row, int column) const
int columnCount() const
int columnMinimumWidth(int column) const
int columnStretch(int column) const
void getItemPosition(int index, int *row, int *column, int *rowSpan, int *columnSpan) const
int horizontalSpacing() const
QLayoutItem *itemAtPosition(int row, int column) const
Qt::Corner originCorner() const
int rowCount() const
int rowMinimumHeight(int row) const
int rowStretch(int row) const
void setColumnMinimumWidth(int column, int minSize)
void setColumnStretch(int column, int stretch)
void setHorizontalSpacing(int spacing)
void setOriginCorner(Qt::Corner corner)
void setRowMinimumHeight(int row, int minSize)
void setRowStretch(int row, int stretch)
void setVerticalSpacing(int spacing)
int verticalSpacing() const

重新实现的公共函数

virtual int count() const override
virtual Qt::Orientations expandingDirections() const override
virtual bool hasHeightForWidth() const override
virtual int heightForWidth(int w) const override
virtual void invalidate() override
virtual QLayoutItem *itemAt(int index) const override
virtual QSize maximumSize() const override
virtual int minimumHeightForWidth(int w) const override
virtual QSize minimumSize() const override
virtual void setGeometry(const QRect &rect) override
virtual void setSpacing(int spacing) override
virtual QSize sizeHint() const override
virtual int spacing() const override
virtual QLayoutItem *takeAt(int index) override

重新实现的受保护函数

virtual void addItem(QLayoutItem *item) override

详细说明

QGridLayout 获取可用空间(由其父布局或parentWidget()) 提供),将其划分为行和列,并将其管理的每个部件放入正确的单元格中。

列和行的行为完全相同;我们将讨论列,但行也有类似的功能。

每一列都有一个最小宽度和一个拉伸系数。最小宽度是使用setColumnMinimumWidth() 设置的宽度与该列中每个部件的最小宽度的最大值。拉伸系数使用setColumnStretch() 设置,决定了该列在必要的最小宽度之外还能获得多少可用空间。

通常,使用addWidget() 可将每个受管理的部件或布局放入自己的单元格中。也可以使用addItem() 和addWidget() 的行跨和列跨重载,让一个窗口小部件占据多个单元格。如果这样做,QGridLayout 会猜测如何在列/行上分配大小(基于拉伸因子)。

要从布局中移除部件,请调用removeWidget() 。对一个部件调用QWidget::hide() 也会有效地将该部件从布局中移除,直到调用QWidget::show() 为止。

本图显示了一个五列三行网格的对话框片段(网格用洋红色覆盖):

网格布局

该对话框片段的第 0、2 和 4 列由QLabelQLineEdit 和 QListBox 组成。第 1 列和第 3 列是用setColumnMinimumWidth() 制作的占位符。第 0 行由三个QLabel 对象组成,第 1 行由三个QLineEdit 对象组成,第 2 行由三个 QListBox 对象组成。我们使用占位符列(1 列和 3 列)来获得列与列之间的适当间距。

请注意,列和行的宽度和高度并不相同。如果希望两列具有相同的宽度,则必须将它们的最小宽度和拉伸因子设置为相同。为此,您可以使用setColumnMinimumWidth() 和setColumnStretch() 进行设置。

如果 QGridLayout 不是顶层布局(即不管理 widget 的所有区域和子区域),则必须在创建时将其添加到父布局中,然后再对其做任何操作。添加布局的常规方法是在父布局上调用addLayout() 。

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

QGridLayout 还包含两种边距宽度:contents marginspacing()。内容页边距是 QGridLayout 四条边上预留空间的宽度。spacing() 是相邻方框之间自动分配的间距宽度。

默认 contents margin 值由style 提供。Qt Widgets 样式指定的默认值为子部件 9,窗口 11。间距默认与顶层布局的 margin 宽度相同,或与父布局的 margin 宽度相同。

另请参阅 QBoxLayout,QStackedLayout,布局管理基本布局示例

属性文档

horizontalSpacing : int

该属性用于保存并排布局的 widget 之间的间距。

如果没有显式设置值,布局的水平间距将从父布局或父部件的样式设置中继承。

访问函数:

int horizontalSpacing() const
void setHorizontalSpacing(int spacing)

另请参阅 verticalSpacingQStyle::pixelMetric() 和PM_LayoutHorizontalSpacing

verticalSpacing : int

该属性用于保存相互叠放的 widget 之间的间距。

如果没有显式设置值,布局的垂直间距将从父布局或父 widget 的样式设置中继承。

访问功能:

int verticalSpacing() const
void setVerticalSpacing(int spacing)

另请参阅 horizontalSpacingQStyle::pixelMetric() 和PM_LayoutHorizontalSpacing

成员函数文档

[explicit] QGridLayout::QGridLayout(QWidget *parent = nullptr)

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

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

如果parentnullptr ,则必须将此网格布局插入到其他布局中,或使用QWidget::setLayout() 将其设置为 widget 的布局。

另请参阅 QWidget::setLayout()。

[virtual noexcept] QGridLayout::~QGridLayout()

销毁网格布局。如果是顶层网格,则会终止几何体管理。

布局的部件不会被销毁。

[override virtual protected] void QGridLayout::addItem(QLayoutItem *item)

重实现:QLayout::addItem(QLayoutItem *item).

void QGridLayout::addItem(QLayoutItem *item, int row, int column, int rowSpan = 1, int columnSpan = 1, Qt::Alignment alignment = Qt::Alignment())

在位置rowcolumn 、跨rowSpan 行和columnSpan 列添加item ,并根据alignment 对齐。如果rowSpan 和/或columnSpan 为-1,则项目将分别延伸至底部和/或右侧边缘。布局拥有item 的所有权。

警告: 请勿使用此函数添加子布局或子 widget 项目。请使用addLayout() 或addWidget() 代替。

void QGridLayout::addLayout(QLayout *layout, int row, int column, Qt::Alignment alignment = Qt::Alignment())

layout 置于网格中 (row,column) 的位置。左上角位置为 (0, 0)。

对齐方式由alignment 指定。默认对齐方式为 0,即窗口小部件填满整个单元格。

如果对齐方式为非 0,则表示布局不应增长以填充可用空间,而应根据sizeHint() 调整大小。

layout 成为网格布局的子单元。

void QGridLayout::addLayout(QLayout *layout, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())

这是一个重载函数。

该版本将布局layout 添加到单元格网格中,横跨多行/列。单元格将从row 开始,columnrowSpan 行和columnSpan 列。

如果rowSpan 和/或columnSpan 为-1,则布局将分别延伸至底边和/或右边。

void QGridLayout::addWidget(QWidget *widget, int row, int column, Qt::Alignment alignment = Qt::Alignment())

将给定的widget 添加到row,column 的单元格网格中。默认情况下,左上角位置为 (0,0)。

对齐方式由alignment 指定。默认对齐方式为 0,即小部件填满整个单元格。

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

这是一个重载函数。

该版本将给定的widget 添加到单元格网格中,跨越多行/列。单元格将从fromRow 开始,fromColumnrowSpan 行和columnSpan 列。widget 将包含给定的alignment

如果rowSpan 和/或columnSpan 为-1,则 Widget 将分别延伸到底部和/或右侧边缘。

QRect QGridLayout::cellRect(int row, int column) const

返回网格中row 行和column 列单元格的几何图形。如果rowcolumn 位于网格外,则返回无效矩形。

警告: 在当前版本的 Qt XML 中,在调用setGeometry() 之前,即在parentWidget() 可见之后,此函数不会返回有效结果。

int QGridLayout::columnCount() const

返回网格中的列数。

int QGridLayout::columnMinimumWidth(int column) const

返回column 列的列间距。

另请参阅 setColumnMinimumWidth() 。

int QGridLayout::columnStretch(int column) const

返回column 列的拉伸系数。

另请参阅 setColumnStretch() 。

[override virtual] int QGridLayout::count() const

重实现:QLayout::count() const.

[override virtual] Qt::Orientations QGridLayout::expandingDirections() const

重实现:QLayout::expandingDirections() const.

void QGridLayout::getItemPosition(int index, int *row, int *column, int *rowSpan, int *columnSpan) const

通过给定的index 返回项目的位置信息。

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

另请参阅 itemAtPosition() 和itemAt()。

[override virtual] bool QGridLayout::hasHeightForWidth() const

重实现:QLayoutItem::hasHeightForWidth() const.

[override virtual] int QGridLayout::heightForWidth(int w) const

重实现:QLayoutItem::heightForWidth(int) const.

[override virtual] void QGridLayout::invalidate()

重新实现:QLayout::invalidate().

[override virtual] QLayoutItem *QGridLayout::itemAt(int index) const

重实现:QLayout::itemAt(int index) const.

QLayoutItem *QGridLayout::itemAtPosition(int row, int column) const

返回占用 (row,column) 单元格的布局项,如果单元格为空,则返回nullptr

另请参阅 getItemPosition() 和indexOf()。

[override virtual] QSize QGridLayout::maximumSize() const

重实现:QLayout::maximumSize() const.

[override virtual] int QGridLayout::minimumHeightForWidth(int w) const

重实现:QLayoutItem::minimumHeightForWidth(int w) const.

[override virtual] QSize QGridLayout::minimumSize() const

重实现:QLayout::minimumSize() const.

Qt::Corner QGridLayout::originCorner() const

返回网格原点的角,即位置(0,0)。

另请参见 setOriginCorner()。

int QGridLayout::rowCount() const

返回网格中的行数。

int QGridLayout::rowMinimumHeight(int row) const

返回为row 行设置的最小宽度。

另请参阅 setRowMinimumHeight() 。

int QGridLayout::rowStretch(int row) const

返回行row 的拉伸因子。

另请参阅 setRowStretch() 。

void QGridLayout::setColumnMinimumWidth(int column, int minSize)

column 列的最小宽度设置为minSize 像素。

另请参阅 columnMinimumWidth() 和setRowMinimumHeight()。

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

column 列的拉伸因子设置为stretch 。第一列的编号为 0。

拉伸因数是相对于该网格中其他列而言的。拉伸系数越大的列占用的可用空间越多,默认拉伸系数为 0。

默认拉伸系数为 0。如果拉伸系数为 0,且表格中其他列都不能增长,则该列仍可增长。

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

另请参见 columnStretch() 和setRowStretch()。

[override virtual] void QGridLayout::setGeometry(const QRect &rect)

重实现:QLayout::setGeometry(const QRect &r).

void QGridLayout::setOriginCorner(Qt::Corner corner)

将网格的原点角,即位置(0,0)设置为corner

另请参阅 originCorner() 。

void QGridLayout::setRowMinimumHeight(int row, int minSize)

row 行的最小高度设置为minSize 像素。

另请参阅 rowMinimumHeight() 和setColumnMinimumWidth()。

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

row 行的拉伸因子设置为stretch 。第一行为 0。

拉伸因数是相对于该网格中其他行而言的。拉伸因数越大的行占用的可用空间越多,默认拉伸因数为 0。

默认拉伸因子为 0。如果拉伸因子为 0,且表格中没有其他行可以增长,则该行仍可增长。

另请参阅 rowStretch()、setRowMinimumHeight() 和setColumnStretch()。

[override virtual] void QGridLayout::setSpacing(int spacing)

重构属性访问函数:QLayout::spacing

该函数将垂直和水平间距都设置为spacing

另请参见 spacing()、setVerticalSpacing() 和setHorizontalSpacing()。

[override virtual] QSize QGridLayout::sizeHint() const

重实现:QLayoutItem::sizeHint() const.

[override virtual] int QGridLayout::spacing() const

重新实现属性QLayout::spacing 的访问函数。

如果垂直间距等于水平间距,该函数返回该值;否则返回-1。

另请参阅 setSpacing()、verticalSpacing() 和horizontalSpacing()。

[override virtual] QLayoutItem *QGridLayout::takeAt(int index)

重实现:QLayout::takeAt(int index)。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.