QGridLayout类

QGridLayout类以网格布局小部件。 更多...

头文件 #include <QGridLayout>
CMakefind_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmakeQT += widgets
继承 QLayout

属性

公共函数

QGridLayout(QWidget *parent = nullptr)
virtual~QGridLayout()
voidaddItem(QLayoutItem *item, int row, int column, int rowSpan = 1, int columnSpan = 1, Qt::Alignment alignment = Qt::Alignment())
voidaddLayout(QLayout *layout, int row, int column, Qt::Alignment alignment = Qt::Alignment())
voidaddLayout(QLayout *layout, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())
voidaddWidget(QWidget *widget, int row, int column, Qt::Alignment alignment = Qt::Alignment())
voidaddWidget(QWidget *widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())
QRectcellRect(int row, int column) const
intcolumnCount() const
intcolumnMinimumWidth(int column) const
intcolumnStretch(int column) const
voidgetItemPosition(int index, int *row, int *column, int *rowSpan, int *columnSpan) const
inthorizontalSpacing() const
QLayoutItem *itemAtPosition(int row, int column) const
Qt::CorneroriginCorner() const
introwCount() const
introwMinimumHeight(int row) const
introwStretch(int row) const
voidsetColumnMinimumWidth(int column, int minSize)
voidsetColumnStretch(int column, int stretch)
voidsetHorizontalSpacing(int spacing)
voidsetOriginCorner(Qt::Corner corner)
voidsetRowMinimumHeight(int row, int minSize)
voidsetRowStretch(int row, int stretch)
voidsetVerticalSpacing(int spacing)
intverticalSpacing() const

重写的公共函数

virtual intcount() const override
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

详细描述

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

列和行行为相同;我们将讨论列,但存在对应行的函数。

每个列都有一个最小宽度和拉伸因子。最小宽度是通过使用setColumnMinimumWidth()设置的值和该列中每个控件的最小宽度中的较大值来确定的。拉伸因子通过使用setColumnStretch()设置,并确定列将获得多少超出其必要最小值的空间。

通常,每个被管理的控件或布局都使用addWidget()放入自己的单元格中。控件也可以通过使用addItem()和addWidget()的重载扩展到多个单元格。如果您这样做,QGridLayout将根据拉伸因子猜测如何分配大小到列/行。

要从布局中移除控件,请调用removeWidget()。在控件上调用QWidget::hide()也将有效地从布局中移除控件,直到调用QWidget::show()。

此图例显示了一个具有五列、三行网格(网格以洋红色叠加显示)的对话框片段。

A grid layout

本对话框片段中的第0列、第2列和第4列由一个QLabel、一个QLineEdit和一个QListBox组成。第1列和第3列是由setColumnMinimumWidth()设置的占位符。第0行由三个QLabel对象组成,第1行由三个QLineEdit对象组成,第2行由三个QListBox对象组成。我们使用了占位符列(第1列和第3列)来获得适当的列间距。

请注意,列和行的高宽并不相同。如果你想使两列的宽度相同,你必须自己将它们的宽度和拉伸因子设置成一样。这是通过使用setColumnMinimumWidth()和setColumnStretch()来实现的。

如果QGridLayout不是顶级布局(即不管理窗口的全部区域和子项),则在创建它时,必须将其添加到其父布局中,但在对其进行任何操作之前。添加布局的常规方法是在父布局上调用addLayout()。

一旦添加了布局,您就可以使用addWidget()、addItem()和addLayout()将小部件和其他布局放入网格布局的单元格中。

QGridLayout还包括两个边缘宽度:内容边缘contents margin和间隔spacing。内容边缘是沿着QGridLayout的四个边缘保留的空间宽度。间隔是相邻框之间自动分配的空间宽度。

默认内容边缘值由style提供。Qt样式指定的默认值是9(对于子小部件)和11(对于窗口)。间隔默认值与顶级布局的边距宽度相同,或者与父布局相同。

另请参阅QBoxLayoutQStackedLayout布局管理基本布局示例

属性文档

horizontalSpacing : int

此属性保存了并排排列的 widget 之间的间距

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

访问函数

inthorizontalSpacing() const
voidsetHorizontalSpacing(int spacing)

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

verticalSpacing : int

此属性保存了上下排列的 widget 之间的间距

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

访问函数

intverticalSpacing() const
voidsetVerticalSpacing(int spacing)

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

成员函数文档

[显式] QGridLayout::QGridLayout(QWidget *parent = nullptr)

使用父控件parent构建一个新的QGridLayout。布局初始时有一行一列,当插入新项目时会扩展。

直接将布局设置为parent的最顶级布局。每个控件只能有一个最顶级布局。它由QWidget::layout()返回。

如果parentnullptr,则必须将此网格布局插入到另一个布局中,或者使用QWidget::setLayout()将其设置为控件布局。

另请参阅QWidget::setLayout().

[虚拟 noexcept] QGridLayout::~QGridLayout()

如果这是顶级网格,则终止几何管理。

布局的控件不会被销毁。

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

rowcolumn位置添加item,跨越rowSpan行和columnSpan列,并根据alignment对其对齐。如果rowSpan和/或columnSpan是-1,则该项目将扩展到底部/右侧边缘。布局会拥有item的所有权。

警告:不要使用该函数添加子布局或子控件项。请使用addLayout()或addWidget()代替。

[重载虚拟受保护] void QGridLayout::addItem(QLayoutItem *item)

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

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

将布局layout放在网格的row,(i translate="no">column)位置。左上位置是(0, 0)。

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

非零对齐表示布局不应扩展以填充可用空间,而应根据sizeHint大小对齐。

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

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

这是一个重载函数。

此版本将布局layout添加到多行/多列的单元格网格中。单元格将从row,(i translate="no">column)开始,跨越rowSpan行和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 添加到网格单元格中,跨越多个行/列。单元格将从 fromRowfromColumn 开始,跨越 rowSpan 行和 columnSpan 列。 widget 将具有给定的 alignment

如果 rowSpan 和/或 columnSpan 为 -1,则 widget 将扩展到底部和/或右侧边缘。

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

返回网格中行 row 和列 column 的单元格的几何形状。如果 rowcolumn 超出网格范围,则返回无效矩形。

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

int QGridLayout::columnCount() const

返回此网格中的列数。

int QGridLayout::columnMinimumWidth(int column) const

返回列 column 的列间距。

另请参阅 setColumnMinimumWidth().

int QGridLayout::columnStretch(int column) const

返回列 column 的扩展因子。

另请参阅 setColumnStretch().

[重写虚函数] int QGridLayout::count() const

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

[重写虚函数] 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().

[覆盖虚函数] bool QGridLayout::hasHeightForWidth() const

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

[覆盖虚函数] int QGridLayout::heightForWidth(int w) const

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

[覆盖虚函数] void QGridLayout::invalidate()

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

[覆盖虚函数] QLayoutItem *QGridLayout::itemAt(int index) const

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

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

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

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

[覆盖虚函数] QSize QGridLayout::maximumSize() const

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

[覆盖虚函数] int QGridLayout::minimumHeightForWidth(int w) const

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

[覆盖虚函数] 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且此表中的其他任何列都无法增长,则列仍然可以增长。

另一种方法是通过使用addItem()和一个QSpacerItem添加间隔。

另请参阅:columnStretch() 和 setRowStretch

[重写虚函数] 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且此表中的其他任何行都无法增长,则行仍然可以增长。

另请参阅:rowStretchsetRowMinimumHeightsetColumnStretch

[重写虚函数] void QGridLayout::setSpacing(int spacing)

重实现了属性访问函数: QLayout::spacing

此函数将垂直和水平间隔都设置为spacing

另请参阅:spacingsetVerticalSpacingsetHorizontalSpacing

[重写虚函数] QSize QGridLayout::sizeHint() const

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

[重写虚函数] int QGridLayout::spacing() const

重实现了属性访问函数: QLayout::spacing

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

另请参阅setSpacing(),verticalSpacing() 和 horizontalSpacing

[重写虚函数] QLayoutItem *QGridLayout::takeAt(int index)

重写自:QLayout::takeAt(int index)。

© 2024 The Qt Company Ltd. 本文档中包含的贡献文档的版权归其各自的拥有者所有。所提供的文档是根据 Free Software Foundation 发布的 GNU Free Documentation License 版本 1.3 的条款许可的。Qt 和相应的标志是 The Qt Company Ltd. 在芬兰和/或其他国家的商标。所有其他商标均为其各自所有者的财产。