QGraphicsAnchorLayout 类

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

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

公共函数

QGraphicsAnchorLayout(QGraphicsLayoutItem *parent = nullptr)
虚拟~QGraphicsAnchorLayout()
QGraphicsAnchor *addAnchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge)
voidaddAnchors(QGraphicsLayoutItem *firstItem, QGraphicsLayoutItem *secondItem, Qt::Orientations orientations = Qt::Horizontal | Qt::Vertical)
voidaddCornerAnchors(QGraphicsLayoutItem *firstItem, Qt::Corner firstCorner, QGraphicsLayoutItem *secondItem, Qt::Corner secondCorner)
QGraphicsAnchor *anchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge)
qrealhorizontalSpacing() const
voidsetHorizontalSpacing(qreal spacing)
voidsetSpacing(qreal spacing)
voidsetVerticalSpacing(qreal spacing)
qrealverticalSpacing() const

重写的公共函数

virtual intcount() const override
virtual voidinvalidate() override
virtual QGraphicsLayoutItem *itemAt(int index) const override
virtual voidremoveAt(int index) override
virtual voidsetGeometry(const QRectF &geom) override

重写的保护函数

virtual QSizeFsizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const override

详细描述

锚点布局允许开发者指定小部件之间以及与小部件布局本身相关的放置方式。通过调用 addAnchor(),addAnchors() 或 addCornerAnchors() 来向布局中添加锚点,从而进行指定。

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

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

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

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 当前不支持的。这可能在将来改变,因此如果想要避免未来行为上的任何回归,请避免使用这些功能。

另请参阅 QGraphicsLinearLayoutQGraphicsGridLayoutQGraphicsLayout

成员函数文档

QGraphicsAnchorLayout::QGraphicsAnchorLayout(QGraphicsLayoutItem *parent = nullptr)

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

[virtual noexcept] QGraphicsAnchorLayout::~QGraphicsAnchorLayout()

销毁 QGraphicsAnchorLayout 对象。

QGraphicsAnchor *QGraphicsAnchorLayout::addAnchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge)

在项目 firstItemfirstEdge 边缘和项目 secondItemsecondEdge 边缘之间创建一个锚点。锚点的间距从样式获取。布局边和项目边的锚点将具有大小为 0。如果两个边之间已经存在一个锚点,则新的锚点将替换旧的锚点。

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

锚点获取的间距取决于锚点的类型。例如,一个项目的右侧边缘到另一个项目的左侧边缘(或反之亦然)的锚点将使用默认的水平间距。相同的行为中国 North 到 Top 的锚点(但它们将使用默认的垂直间距)。对于所有其他锚点组合,间距将为 0。所有锚点函数都将遵循此规则。

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

firstItemsecondItem 是布局的祖先时,调用此函数会有未定义的行为。

另请参阅addAnchors() 和 addCornerAnchors()。

void QGraphicsAnchorLayout::addAnchors(QGraphicsLayoutItem *firstItem, QGraphicsLayoutItem *secondItem, Qt::Orientations orientations = Qt::Horizontal | Qt::Vertical)

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);

另请参阅addAnchor() 和 addCornerAnchors()。

void QGraphicsAnchorLayout::addCornerAnchors(QGraphicsLayoutItem *firstItem, Qt::Corner firstCorner, QGraphicsLayoutItem *secondItem, Qt::Corner secondCorner)

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

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

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.

QGraphicsAnchor *QGraphicsAnchorLayout::anchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge)

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

[重写虚拟] int QGraphicsAnchorLayout::count() const

重写: QGraphicsLayout::count() const.

qreal QGraphicsAnchorLayout::horizontalSpacing() const

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

另请参阅 verticalSpacing() 和 setHorizontalSpacing.

[重写虚拟] void QGraphicsAnchorLayout::invalidate()

重写: QGraphicsLayout::invalidate().

[重写虚拟] QGraphicsLayoutItem *QGraphicsAnchorLayout::itemAt(int index) const

重写: QGraphicsLayout::itemAt(int i) const.

[重写虚拟] void QGraphicsAnchorLayout::removeAt(int index)

重写: QGraphicsLayout::removeAt(int index).

移除位于 index 的布局项而不销毁它。项目的所有权转移给调用者。

移除项还会移除与其关联的所有锚点。

另请参阅 itemAt() 和 count.

[重写虚拟] void QGraphicsAnchorLayout::setGeometry(const QRectF &geom)

重写: QGraphicsLayoutItem::setGeometry(const QRectF &rect).

void QGraphicsAnchorLayout::setHorizontalSpacing(qreal spacing)

将锚布局的默认水平间隔设置为 spacing

另请参阅 horizontalSpacing(), setVerticalSpacing(), 和 setSpacing.

void QGraphicsAnchorLayout::setSpacing(qreal spacing)

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

如果一个项目没有与锚相关联的间距,它将使用默认间距。

QGraphicsAnchorLayout不支持负间距。设置负值将取消之前的间距,并使布局使用当前小部件风格的间距。

另请参阅setHorizontalSpacing() 和 setVerticalSpacing()。

void QGraphicsAnchorLayout::setVerticalSpacing(qreal spacing)

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

另请参阅verticalSpacing(),setHorizontalSpacing() 及 setSpacing()。

[覆盖虚保护] QSizeF QGraphicsAnchorLayout::sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const

重新实现了:QGraphicsLayoutItem::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const.

qreal QGraphicsAnchorLayout::verticalSpacing() const

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

另请参阅horizontalSpacing() 和 setVerticalSpacing()。

© 2024 Qt公司。此文档中的文档贡献权归各自所有者所有。提供的文档受GNU自由文档许可证1.3版本的条款约束,由自由软件基金会发布。Qt以及相应的标志是芬兰和/或其他国家的Qt公司注册商标。所有其他商标均为其所有者财产。