QLayout类

QT基础之基本布局QLayout 介绍QT基本布局QLayoutQt的布局,水平、垂直、网格、表单布局,伸展因素等,并通过Demo介绍如何使用基本布局管理,如QHBoxLayout、QVBoxLayout、QGridLayout 阅读详情

QLayout类是布局管理器的基类。


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

QBoxLayoutQFormLayoutQGridLayout >>>, QStackedLayout


【详细说明】

这是一个由 QBoxLayoutQGridLayoutQFormLayout, QStackedLayout继承的抽象基类。

对于QLayout子类或QMainWindow的用户,很少需要使用QLayout提供的基本功能,例如:setSizeConstraint() or setMenuBar()(参见 Layout Management)。

要创建自己的布局管理器,请实现函数addItem(), sizeHint(), setGeometry(), itemAt() 和 takeAt()。您还应该实现 minimumSize() ,以确保如果空间太小,您的布局不会调整为零大小。

若要支持身高取决于其宽度的子对象,请实现hasHeightForWidth() 和 heightForWidth()。

有关实现自定义布局管理器的详细信息,请参阅示例 Flow Layout

删除布局管理器时,布局管理将停止。

参见: QLayoutItemLayout ManagementBasic Layouts Example 和 Flow Layout Example


【公共类型】

enumSizeConstraint { SetDefaultConstraint, SetFixedSize, SetMinimumSize, SetMaximumSize, SetMinAndMaxSize, SetNoConstraint }

 尺寸模式SizeConstraint参数详解如下:

枚举名称说明
QLayout::SetDefaultConstraint0主 Widget 的最小尺寸设置为 minimumSize(), 除非 Widget 已经是最小尺寸。这是默认的尺寸模式。
QLayout::SetFixedSize3主 widget 尺寸设置为 sizeHint(),且无法调整大小。
QLayout::SetMinimumSize2主 widget 的最小尺寸设置为 minimumSize(),不能比这更小。
QLayout::SetMaximumSize4主 widget 的最大尺寸设置为 maximumSize(),不能比这更大。
QLayout::SetMinAndMaxSize5主 widget 的最小尺寸设置为 minimumSize() ,并且最大尺寸设置为 maximumSize()。
QLayout::SetNoConstraint1控件尺寸不受约束。

【属性】

此属性保存布局的调整尺寸模式,详见上方SizeConstraint枚举。

此属性保存布局内控件之间的间距。

如果未显式设置任何值,则布局的间距将从父布局或父构件的样式设置继承。

对于QGridLayout 和 QFormLayout,可以使用setHorizontalSpacing() 和 setVerticalSpacing()设置不同的水平和垂直间距。在这种情况下,spacing() 返回 -1。


【公有函数】

构造一个新的顶级 QLayout,其父级为nullptr。

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

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

QLayout(QWidget *parent = nullptr)
boolactivate()

在必要时重做 parentWidget() 的布局。

您通常不需要调用它,因为它是在合适的时机自动调用的。如果重新设置了布局,则返回 true。

virtual voidaddItem(QLayoutItem *item) = 0
此虚函数从子类中实现,以添加 item 项。它的添加方式特定于每个子类。

此函数通常不会在应用程序代码中调用。要将控件添加到布局中,请使用addWidget()函数,要添加子布局,请使用相关子类提供的 QGridLayout::addLayout()函数。

注意:item 的所有权已转移到布局,布局有责任将其销毁。

voidaddWidget(QWidget *w)
以特定布局的方式将控件添加到此w布局中。此函数使用addItem()。
QMarginscontentsMargins() const

返回布局周围使用的边距。

默认情况下,使用QLayout样式提供的值。在大多数平台上,所有方向的边距均为 11 像素。

它属性 contentsMargins 的 Getter 函数。

QRectcontentsRect() const
返回布局的geometry() 矩形,但要考虑内容边距。
virtual intcount() const = 0
必须在子类中实现,用以返回布局中的项数。
voidgetContentsMargins(int *left, int *top, int *right, int *bottom) const

对于 lefttopright 和 bottom中的每一个,如果不为nullptr,都将存储指针所引用位置中指定的边距大小。

默认情况下,使用样式提供的值。在大多数平台上,所有方向的边距均为 11 像素。

virtual intindexOf(const QWidget *widget) const
在此布局中搜索控件项(不包括子布局)。

返回 widget 的索引,如果未找到,则返回 -1。

在默认实现中,它是使用 itemAt() 遍历所有项目。

virtual intindexOf(const QLayoutItem *layoutItem) const

在此布局中搜索布局项(不包括子布局)。

返回 layoutItem 的索引,如果未找到,则返回 -1。

boolisEnabled() const
布局可用性检查,可用返回true,否则返回 false
virtual QLayoutItem *itemAt(int index) const = 0

必须在子类中重新实现,用于返回位于index 的布局项。如果没有此类项,则函数必须返回nullptr。项目从 0 开始连续编号。如果删除某个项目,则将对其他项目重新编号。

此函数可用于循环访问布局。以下代码将为控件布局结构中的每个布局项绘制一个矩形。

QWidget *menuBar() const
返回为此布局设置的菜单栏,如果未设置菜单栏,则返回nullptr。
QWidget *parentWidget() const

返回此布局的父控件,或者如果此布局未从属于任何widget则返回nullptr。

如果布局是子布局,则此函数将返回父布局的父 layout。

voidremoveItem(QLayoutItem *item)

从布局中删除布局项 item 。调用方有责任删除该项目。

注意, item 可以是layout(因为 QLayout继承QLayoutItem)。

voidremoveWidget(QWidget *widget)

从布局中删除控件。在此调用之后,调用者有责任为控件提供合理的形状,或者将控件放回布局中,或者在必要时显式隐藏它。

注意:widget 的所有权与添加时相同。

virtual QLayoutItem *replaceWidget(QWidget *from, QWidget *to, Qt::FindChildOptions options = Qt::FindChildrenRecursively)

搜索from控件并在找到时将其替换为to控件。在成功时返回包含此控件的布局项,否则返回nullptr。如果参数包含 Qt::FindChildrenRecursively (默认值),则搜索子布局以进行替换。这将忽略选项中的任何其他标志。

请注意,返回的项可能不属于此布局,而是属于子布局。

返回的布局项不再归该布局所有,应将其删除或插入到另一个布局中。 from不再由布局管理,可能需要删除或隐藏。 from控件的父级保持不变。

此函数适用于内置的 Qt 布局,但可能不适用于自定义布局。

boolsetAlignment(QWidget *w, Qt::Alignment alignment)
将 widget 的对齐方式设置为alignment,如果在此布局中找到了w,则返回 true(不包括子布局);否则返回 false
boolsetAlignment(QLayout *l, Qt::Alignment alignment)
重载。将 QLayout l 的对齐方式设置为alignment,如果在此布局中找到了 l,则返回 true(不包括子布局);否则返回 false
voidsetContentsMargins(int left, int top, int right, int bottom)
设置要在布局周围使用的  lefttopright, and bottom 边距。默认情况下,使用样式提供的值。在大多数平台上,所有方向的边距均为 11 像素。
voidsetContentsMargins(const QMargins &margins)
设置要在 margins 周围使用的边距。默认情况下,使用样式提供的值。在大多数平台上,所有方向的边距均为 11 像素。
voidsetEnabled(bool enable)

如果为 true,则启用此布局,否则禁用它。启用的布局会根据更改动态调整;禁用的布局就像它不存在一样。

默认情况下,所有布局都处于启用状态。

voidsetMenuBar(QWidget *widget)
指示布局管理器将菜单栏放在 parentWidget()的顶部,在 QWidget::contentsMargins()之外。所有子控件都放置在菜单栏的下边缘下方。
voidsetSizeConstraint(QLayout::SizeConstraint)
属性 SizeConstraint的设置函数。
virtual voidsetSpacing(int)
组件间距离属性spacing的设置函数。
QLayout::SizeConstraintsizeConstraint() const
布局的调整尺寸模式属性SizeConstraint的访问函数。
virtual intspacing() const
布局内控件之间的间距spacing属性的访问函数。
virtual QLayoutItem *takeAt(int index) = 0

必须在子类中重新实现,才能从布局中删除布局项,并返回该项的index。如果没有这样的项,则该函数必须不执行任何操作并返回 0。项目从 0 开始连续编号。如果某个项目被删除,其他项目将被重新编号。

以下代码片段演示了一种从布局中删除所有项的安全方法:

voidunsetContentsMargins()

取消设置布局周围的任何用户定义的边距。布局将使用样式提供的默认值。

这是 contentsMargins 属性的复位器。

voidupdate()
刷新parentWidget()布局,用户无需调用,它会在合适时机自动调用。

【重新实现的公有函数】

 以下函数是其父类虚函数的重载,详见【<< QLayoutItem类】

virtual QSizePolicy::ControlTypescontrolTypes() const override
virtual Qt::OrientationsexpandingDirections() const override
virtual QRectgeometry() const override
virtual voidinvalidate() override
virtual boolisEmpty() const override
virtual QLayout *layout() override
virtual QSizemaximumSize() const override
virtual QSizeminimumSize() const override
virtual voidsetGeometry(const QRect &r) override

【静态公有成员】

QSizeclosestAcceptableSize(const QWidget *widget, const QSize &size)
返回一个满足 widget 上的所有大小约束的尺寸,包括 heightForWidth() ,并且该大小尽可能接近size

【受保护函数】

voidaddChildLayout(QLayout *childLayout)

此函数从子类中调用addLayout()或insertLayout()函数,以将布局添加为子布局。

需要直接调用它的唯一方案是实现支持嵌套布局的自定义布局。

voidaddChildWidget(QWidget *w)

此函数是从子类中的addWidget()函数中调用的,以添加为布局的托管控件。

如果w已由布局管理,则此函数将生成警告,并从该布局中删除。因此,在添加w到布局的数据结构之前,必须调用此函数。

QRectalignmentRect(const QRect &r) const

返回此布局的几何图形设置为 r 时应覆盖的矩形,前提是此布局支持  setAlignment()。

结果由 sizeHint() 和 expandingDirections()派生。它永远不会大于 r 。


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

<<< 返回根页面

PyQt(Python+Qt)学习随笔:布局控件layout的layoutSizeConstraint属性 Qt Designer中布局控件有4个,分别是Vertical Layout(垂直布局)、Horizontal Layout(水平布局)、Grid Layout(网格布局)、Form Layout(表单布局),这些布局控件都有layoutSizeConstraint这个属性,如图: 这个属性实际对应QLayout的sizeConstraint属性,具体取值由枚举QLayout.SizeC... 阅读详情

相关推荐

PyQt 布局控件中的 layoutSizeConstraint 属性

在 PyQt 中,布局控件(layout)是一种强大的机制,用于管理和组织界面上的其他控件。总结起来,PyQt 中的布局控件提供了灵活且强大的方式来管理和组织界面上的控件。通过使用 layoutSizeConstraint 属性,我们可以指定布局在调整大小时采取的行为,以满足不同的布局需求。布局控件可以自动调整其子控件的大小和位置,以适应不同的窗口大小或布局要求。这意味着,当窗口被调整大小时,布局将尽可能地保持最小的尺寸,并且不会超出其所需的最小空间。这可以确保布局在窗口缩小时不会发生控件的重叠或截断。

HackDyno的博客 1385

Qt | setSizeConstraint、setSizePolicy大小约束(主窗口最大最小大小的设置)

Qt | setSizeConstraint、setSizePolicy大小约束(主窗口最大最小大小的设置)

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

setSizeConstraint(QLayout::SetFixedSize) 是 QWidget 的成员函数,用于设置小部件的大小约束(Size Constraint)

通过设置大小约束,我们可以控制小部件的自动调整大小行为,以满足特定的布局和设计需求。对于希望保持固定大小的小部件,设置大小约束为。枚举中的一个值,表示将小部件的大小固定为给定的尺寸,不允许自动调整大小。即,小部件将始终保持固定的宽度和高度。的成员函数,用于设置小部件的大小约束(Size Constraint)。在 Qt 中,大小约束定义了小部件可以自动调整大小的方式。枚举值作为参数,用于指定小部件的大小约束型。函数来将其大小约束设置为固定大小。以下是一个示例,展示如何使用。可以确保其尺寸始终保持不变。

m0_46376834的博客 1868

《七》布局QLayout

QLayout是由具体 QBoxLayout和 QStackedLayout继承的抽象基。对于 QLayout或 QMainWindow的用户,很少需要使用 QLayout 提供的基本功能,例如 setSizeConstraint() 或 setMenuBar()。Qt 布局系统提供了一种简单而强大的方法,可以在控件内自动排列子控件,以确保它们充分利用可用空间。Qt 包含一组布局管理,用于描述控件在应用程序用户界面中的布局方式。

ayf9999的博客 1082

Qt 布局(QLayout &QStackedWidget ) 总结

Qt 布局(QLayout &QStackedWidget )

wei_Embedded_z的博客 1683

布局(03):【QLayout[官翻]

文章目录详细说明公共型## enum SizeConstraint属性公共函数构造函数属性相关其他增删改查尺寸大小重写的公共函数静态公共函数受保护的函数重写的受保护的函数参考 QLayout QLayout是几何管理器的基。 Header: #include < QLayout > qmake: QT += widgets Inherits: QObject and QLayoutItem Inherited By: QBoxLayout, QFormLayo

读书笔记 664

Qt布局管理(5):自定义布局器(QLayoutQLayoutItem)

Qt布局管理(5):自定义布局器(QLayoutQLayoutItem、QSpacerItem、QWidgetItem) 若对C++语法不熟悉,建议参阅《C++语法详解》一书,电子工业出版社出版 自定义布局需要使用QLayoutQLayoutItem(布局项目),其中QLayoutItem描述了QLayout布局中的项目信息。 5.5.1 QLayout抽象中的公有成员函数 QLayou...

黄邦勇帅的博客 1万+

QT布局管理(分割窗口QSplitter、停靠窗口QDockWidget、堆栈窗体QStackedWidget、基本布局QLayout

文章介绍QT常用布局管理,包括QSpliter、QDockWidget、QStackedWidgwt以及QLayout

weixin_42369301的博客 2281

QLayout

一、描述 QLayout 是布局管理器的基,是 QBoxLayout、QGridLayout、QFormLayout 和 QStackedLayout 继承的抽象基。 要自定义布局管理器,须实现函数: addItem() sizeHint() setGeometry() itemAt() takeAt() 还应该实现 minimumSize() 以确保如果空间太少,布局不会调整为零大小。要支持高度取决于宽度的子项,须实现 hasHeightForWidth() 和 heightForW.

友善啊,朋友的博客 3204

QT_QT布局常用QStackedWidget与QLayout

QT_QT布局常用QStackedWidget与QLayout学习记录,后续使用查阅

前端开发工程师 528

QT实现竖直方向的窗口布局(使用QLayout

QT中使用布局器QLayout进行布局 1.它会为我们自动的计算各个控件的大小和位置; 2.当父窗口调整时,它会根据既定策略Policy来调整各个子窗口的大小和位置。 常用的两个QLayout属于QBoxLayout中分别为QHLayout和QVlayout 举个例子:创建两个叠加的纵向的窗体 首先在MyWin.h里写入   #include &lt;QWidget&gt; ...

凌空的桨 3486

QLayout Class

Header:#include < QLayout > qmake:QT += widgets Inherits:QObject and QLayoutItem Inherited By:QBoxLayout, QFormLayout, QGridLayout, and QStackedLayout

weixin_43446462的博客 939

QT开发教程】QLayout详解及实战应用:Qt中的布局管理器

在图形用户界面(GUI)开发中,控件的布局是一个重要的设计环节。Qt框架提供了QLayout及其子,帮助开发者管理窗口控件的排列和调整。本文将深入探讨QLayout的功能及其在Qt应用中的实际应用。

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

QT学习总结:分局管理中的Qsplitter、QDockWidget、QStackedWidgetQLayout函数用法总结

1

1088

布局管理(分割窗口QSplitter、停靠窗口QDockWidget、堆栈窗体QStackedWidget、基本布局(QLayout))

1、分割窗口QSplitter 2、停靠窗口QDockWidget 3、堆栈窗体QStackedWidget 4、基本布局(QLayout

qingkongyeyue的博客 2349

Qt学习——布局管理器QLayout

最近感觉没有那么多时间在网上写学习笔记了。还是自己在本子上手写吧。这里只贴上代码和截图记录自己的学习历程。 常用的布局管理有QVBoxLayout,QHBoxLayout,QGridLayout。 下面是综合应用: 新建Qt Gui程序,基为Dialo

liming's blog 6646

51-QLayoutQStackedWidget

QStackedwidget 控件相当于一个窗口一样,提供一个空间专门存放一些控件(并且每次只能有一个控件可见,被设置为当前的控件)

m0_74216169的博客 220

QT6 源(40): QLayout 的源码 : QObject , QLayoutItem。布局里可以直接加入子布局或子容器,

(1)(2)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值