class QGraphicsAnchorLayout#

QGraphicsAnchorLayout 类提供了一个布局,其中可以在图形视图中将小部件锚定在一起。更多...

Inheritance diagram of PySide6.QtWidgets.QGraphicsAnchorLayout

4.6 版本中新增。

概述#

方法#

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译有误,也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 上创建工单来告知我们。

详细说明#

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

锚布局允许开发者指定小部件应该如何相互放置以及相对于布局本身的放置方式。通过调用 addAnchor()addAnchors()addCornerAnchors() 向布局添加锚点来指定。

可以使用 anchor() 函数访问布局中现有的锚点。被锚定的项将自动添加到布局中,如果移除项,则所有相关的锚点也将自动移除。

simpleanchorlayout-example1 使用锚布局对简单的彩色小部件进行对齐。

锚点总是在项的边缘之间设置,其中“中心”也被视为边缘。考虑以下示例

layout.addAnchor(b, Qt.AnchorLeft, a, Qt.AnchorRight)
layout.addAnchor(b, Qt.AnchorTop, a, Qt.AnchorBottom)

在此处,项 a 的右边缘锚定到项 b 的左边缘,而项 a 的底边锚定到项 b 的顶边,因此项 b 将放置在项 b 的右下方对角线位置。

addCornerAnchors() 函数提供了一种比上述代码中的两个单独调用 addAnchor() 更简单的方法来实现两个小部件角落的锚定。在此,我们看到了如何将小部件锚定到包围布局的左上角

layout.addCornerAnchors(a, Qt.TopLeftCorner, layout, Qt.TopLeftCorner)

当使用锚点匹配小部件的宽度和高度时,使用 addAnchors() 函数很方便。与其他指定锚点的函数一样,它也可以用来将小部件锚定到布局上。

锚布局中的尺寸提示和尺寸策略#

QGraphicsAnchorLayout 遵循每个项的大小提示和大小策略。注意,有一些 QSizePolicy 属性是不被 尊重 的。

锚点布局内的间距#

布局可以在项之间分配一些空间。如果没有明确指定间距,实际的空间量通常为0。

但是,如果第一个边缘是第二个边缘的 对立边(例如,第一个小部件的右边缘锚定到第二个小部件的左边缘),则将根据像素度量通过样式查询锚点的大小:水平锚点使用 PM_LayoutHorizontalSpacing,垂直锚点使用 PM_LayoutVerticalSpacing

如果间距为负,项目将在某种程度上重叠。

已知的难题#

目前 QGraphicsAnchorLayout 不支持一些功能。这可能在未来发生变化,所以如果你想避免任何未来的行为回退,请避免使用这些功能。

  • 缩放因子不被尊重。

  • ExpandFlag 不被尊重。

  • 宽度的高度不被尊重。

__init__([parent=None])#
参数::

parentQGraphicsLayoutItem

构造一个 QGraphicsAnchorLayout 实例。将 parent 传递给 QGraphicsLayout 的构造函数。

addAnchor(firstItem, firstEdge, secondItem, secondEdge)#
参数::
返回类型:

QGraphicsAnchor

创建一个锚点,将项目 firstItem 的边 firstEdge 与项目 secondItem 的边 secondEdge 之间的锚点。锚点的间距取自样式。布局边和项目边的锚点将有 0 大小。如果已有这两个边之间的锚点,新锚点将替换旧锚点。

firstItemsecondItem 如果不是布局的一部分,将自动添加到布局中。这意味着 count() 可以增加到最多 2。

锚点将获得的间距取决于锚点的类型。例如,来自一个物品的右侧边到另一个物品的左侧边(或反之)的锚点将使用默认的水平间距。相同的操作适用于从底部到顶部的锚点(但它们将使用默认的垂直间距)。对于所有其他锚点组合,间距将为 0。所有锚定函数都将遵循此规则。

还可以通过使用 setSpacing() 方法手动设置间距。

如果 firstItemsecondItem 是布局的祖先,调用此函数将出现未定义行为。

addAnchors(firstItem, secondItem[, orientations=Qt.Horizontal | Qt.Vertical])#
参数::

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

firstItem 的两个或四个边与 secondItem 的对应边锚点,使得 firstItemorientations 规定的维度上与 secondItem 大小相同。

例如,以下示例将两个项的左右边缘锚定以匹配它们的宽度

layout.addAnchor(b, Qt.AnchorLeft, c, Qt.AnchorLeft)
layout.addAnchor(b, Qt.AnchorRight, c, Qt.AnchorRight)

这也可以通过以下代码行实现

layout.addAnchors(b, c, Qt.Horizontal)
addCornerAnchors(firstItem, firstCorner, secondItem, secondCorner)#
参数::

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

在项firstItemsecondItem之间创建两个锚点,分别由角firstCornersecondCorner指定,一个用于水平边缘,另一个用于垂直边缘。

这是一个便利函数,因为锚定角可以表达为锚定两个边缘。例如

layout.addAnchor(a, Qt.AnchorTop, layout, Qt.AnchorTop)
layout.addAnchor(a, Qt.AnchorLeft, layout, Qt.AnchorLeft)

这也可以通过以下代码行实现

layout.addCornerAnchors(a, Qt.TopLeftCorner, layout, Qt.TopLeftCorner)

如果已经存在边缘对的锚定,则将替换为此函数指定的锚定。

firstItemsecondItem 如果不是布局的一部分,将自动添加到布局中。这意味着 count() 可以增加到最多 2。

另请参阅

addAnchor() addAnchors()

anchor(firstItem, firstEdge, secondItem, secondEdge)#
参数::
返回类型:

QGraphicsAnchor

返回由firstItemfirstEdge定义的锚点和由secondItemsecondEdge定义的锚点之间的锚点。如果没有这样的锚点,则函数将返回0。

horizontalSpacing()#
返回类型:

float

返回锚定布局的默认水平间距。

setHorizontalSpacing(spacing)#
参数::

间距 – 浮点数

将锚点布局的默认水平间距设置为 间距

setSpacing(间距)#
参数::

间距 – 浮点数

将锚点布局的默认水平和垂直间距设置为 间距

如果某个项目未被锚定且未与锚点关联间距,则它将使用默认间距。

QGraphicsAnchorLayout 不支持负间距。设置负值将取消之前设置的间距,并将布局切换到使用当前小部件样式提供的间距。

setVerticalSpacing(间距)#
参数::

间距 – 浮点数

将锚点布局的默认垂直间距设置为 间距

verticalSpacing()#
返回类型:

float

返回锚点布局的默认垂直间距。