QGridLayout类

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

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类】

<<< 返回根页面

Qt中的QGridLayout网格布局下的两种不同的addWidget功能 Qt中的QGridLayout网格布局中,有许多基自带的函数,在这里,我主要介绍一下其中的一个函数,addWidget函数,在我的仿真实验中,运用到了这个函数,这个函数的两种不同的功能都被我使用到了,故在这里进行介绍。 addWidget第一种功能: void QGridLayout::addWidget(QWidget *widget, int row, int column, Qt::Alignment alignment = Qt::Alignment()) 这是这个函数的第一种功能,第一个参 阅读详情

相关推荐

PyQt QGridLayout 详解

摘要:QGridLayout是PyQt中强大的网格布局管理器,通过行列结构实现控件精准定位。核心功能包括添加控件(支持跨行跨列)、设置行列属性(拉伸因子/最小尺寸)、调整间距边距等,特别适合构建表单、设置界面等复杂布局。文中通过个人信息表单等完整示例,展示了如何嵌套布局、对齐控件、设置响应式拉伸等实用技巧,并总结了规划网格结构、使用组框分等最佳实践。该布局管理器为开发结构化、自适应界面提供了高度灵活性。

浩瀚之水的专栏 148

Qt之格栅布局(QGridLayout

简述 QGridLayout:格栅布局,也被称作网格布局(多行多列)。 栅格布局将位于其中的窗口部件放入一个网状的栅格之中。QGridLayout需要将提供给它的空间划分成的行和列,并把每个窗口部件插入并管理到正确的单元格。 栅格布局是这样工作的: 它计算了位于其中的空间,然后将它们合理的划分成若干个行(row)和列(colu...

weixin_34419321的博客 7357

QT开发】网格布局管理器QGridLayout详解及实战应用

QGridLayoutQt 提供的一个功能强大且灵活的网格布局管理器,通过本篇文章的学习,你应该对 QGridLayout 有了全面的理解,能够在自己的项目中正确使用它。网格布局管理器在用户界面中帮助你更好地管理和安排控件的位置,有助于创建用户友好和美观的界面。

科技改变人类,技术成就未来 1251

QT QGridLayout网格布局控件

本文详细的介绍了QGridLayout控件的各种操作,例如:新建界面、控件布局、获取行、获取列、某行伸缩系数、某列伸缩系数、某列最小宽度、某行最小宽度、总单元格数、移除布局条目、移动布局条目、其它文章等操作。 实际开发中,一个界面上可能包含十几个控件,手动调整它们的位置既费时又费力。布局管理器可以完成两件事:自动调整控件的位置,包括控件之间的间距、对齐等;当用户调整窗口大小时,位于布局管理器内的控件也会随之调整大小,从而保持整个界面的美观。 本系列QT全面详解文章目前共有二

断点 2967

[Qt 教程之Widgets模块] —— QGridLayout栅格布局

与`QBoxLayout`只能在一个方向布局不同,`QGridLayout`可以在网格中布局(垂直和水平两个方向)。

淋曦的进击手记 2万+

PyQt入门(5)-尺寸策略和布局(下)

列的最小宽度用setColumnMinimumWidth()设置,列的最小宽度也是该列中每个小部件的最小宽度。拉伸因子是使用setColumnStretch()设置的,它确定列在最小宽度之上将获得多少可用空间。如果希望两列具有相同的宽度,则必须将它们的最小宽度和拉伸因子设置为相同。QFormLayout是一个便捷的布局,它以一个两列的表单形式来排列它的子widget,左列是标签,右列是Input类型的widget。可以看到,对于表单需求的界面,用QFormLayout实现起来是很便捷的。

guochaogang的博客 1997

删除QGridLayout中的Widget

准备工作1.新建一个工程,然后删除mainwindow的ui,头文件和源文件。2.新建一个主窗口,布局如下: 3.新建一个窗口作为子窗口,用于动态加入到widgetGridLayout布局中。 代码实现实现AddWidget按钮槽函数void Form::on_btnAddWidget_clicked() { childWidget *widget = new childWidget

迷惘宅猪的专栏 2万+

QGridLayout详细介绍

是 PyQt5 中用于将控件按的布局管理器,支持复杂的多行多列布局,适合构建表单、仪表盘等需要精确控制控件位置的场景。

wanglaqqqq的博客 1155

QGridLayout及示例

将其分为行和列,并将其管理的每个小部件放入正确的单元格中。由于网格布局管理器中的组件也是会随着窗口拉伸而发生变化的,所以也是需要设置组件之间的比例系数的,与。网格布局,使用几个按钮,将他们设置为网格布局,同时设置它们的行、列比例系数(拉伸因子),以及设置它们的一些属性。系数比(拉伸因子),所以看到的按钮是按系数比的比例显示。”具体代码由新建项目时生成,无改动。程序编译运行的结果如下。不同的是网格布局管理器还需要分别。提供了布局管理器里的一种以。个按钮,因为设置了行、列的。的方式管理界面组件。

2301_79503228的博客 228

布局(08):【QGridLayout[官翻]

文章目录详细说明属性公共函数构造和析构属性相关增加和索引位置相关大小相关重写的公共函数重写的受保护的函数相关代码 QGridLayout QGridLayout在网格中布局小部件。 Header: #include < QGridLayout > qmake: QT += widgets Inherits: QLayout Inherited By: 详细说明 QGridLayout获取可用的空间(通过其父布局或parentWidget() ),将其划分为行

读书笔记 1364

PyQt6/PySide6 的 QGridLayout

优先使用布局管理器而非绝对坐标合理设置拉伸因子实现响应式布局使用最小尺寸约束防止内容压缩定期调用update()刷新布局配合QSpacerItem实现灵活留白# 综合示例:带边栏的主界面main_layout.addWidget(sidebar, 0, 0, 2, 1) # 跨两行main_layout.setColumnStretch(1, 3) # 内容区域3倍宽度main_layout.setRowStretch(0, 3) # 主内容区3倍高度。

燃灯工作室 646

QT」布局QGridLayout 网格布局

QGridLayoutQt框架中一个用于管理窗口部件布局的。它将窗口或小部件划分为一个规则的网格,并将小部件放置在网格的不同位置上。QGridLayout可以自动调整小部件的大小和位置,以适应窗口的大小调整。这使得QGridLayout成为创建复杂用户界面的强大工具。QGridLayout的构造函数非常简单,可以通过默认构造函数创建一个空的网格布局,也可以通过指定父部件的构造函数创建一个与父部件关联的网格布局。QGridLayout提供了丰富的公有函数,用于添加、删除和管理小部件。

何曾参静谧的博客 1418

【Python开发技术之PyQt5精品教学】第9课--PyQt5 QGridLayout

GridLayout对象以行和列排列的单元格网格的形式呈现。该包含addWidget()方法。通过指定单元格的行数和列数可以添加任何小部件。如果指定了行和列的跨度因子,可以使小部件的宽度或高度大于一个单元格。addWidget()方法有两种重载形式,如下所示−网格中的任何单元格也可以添加子布局对象。

xzs51job的专栏 544

Qt布局管理(4):网格布局(QGridLayout)

Qt布局管理(4):网格布局(QGridLayout)

weixin_37603532的博客 538

Qt | QGridLayout (网格布局)

QGridLayout基本原理是把窗口划分为若干个单元格,每个子部件被放置于一个或多个单元格之中,各 单元格的大小可由拉伸因子和一行或列中单元格的数量来确定,若子部件的大小(由 sizeHint()确定)小于单元格,则可以设置该子部件位于单元格的什么位置(顶部、左侧、底 部等),还可设置该子部件是否可以拉伸以填满该单元格等等。

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 1312

基本布局-QHBoxLayout、QVBoxLayoutQGridLayout

(1)新建Qt Widget Application,项目名UserInfo,基QDialog,取消创建界面; (2)打开dialog.h头文件,在头文件中声明对话框中的各个控件,添加代码#ifndef DIALOG_H #define DIALOG_H#include <QDialog> //添加头文件 #include <QLabel> #include <QLineEdit> #inclu

雨中山草 1万+

Qt:QChart绘图介绍(主要包含:QChart,QTableWidget,QGridLayout

Qt:QChart绘图介绍(主要包含:QChart,QTableWidget,QGridLayout) 首先点击【打开】摁键,从excel中读入相关数据 之后点击【计算】摁键,将数据进行处理,并将部分输出到TableWidget中,部分绘制到QChart中 目录 效果展示: TableWidget绘制及数据输出: QChart相关内容(刷新,图例,绘制双曲线,自定义坐标系): QG...

qq_41605114的博客 9605

Qt horizontal line和vertical line的使用方法及在 QGridLayout 中的应用

1.horizontal line 和vertical line 的使用 horizontal line 和vertical line 实际上是由QFame,设置相应的参数来实现的;而不是由单独的来实现的,例如(QHorizontalLine/QVerticalLine); 1.1.控件拖拽 1.2.代码实现 QFrame *line = new QFrame()...

qq_37282105的博客 5169
上一篇: QSpacerItem类
下一篇: QList类
floatbit
博客等级 码龄24年 460粉丝 47原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值