QLayout类

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

<<< 返回根页面

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值