本页内容

QGraphicsLayoutItem Class

可以继承 QGraphicsLayoutItem 类,以便让布局管理您的自定义项。更多内容...

头文件: #include <QGraphicsLayoutItem>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
由以下函数继承:

QGraphicsLayout 以及QGraphicsWidget

公共函数

QGraphicsLayoutItem(QGraphicsLayoutItem *parent = nullptr, bool isLayout = false)
virtual ~QGraphicsLayoutItem()
QRectF contentsRect() const
QSizeF effectiveSizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const
QRectF geometry() const
virtual void getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const
QGraphicsItem *graphicsItem() const
(since 6.0) virtual bool isEmpty() const
bool isLayout() const
qreal maximumHeight() const
QSizeF maximumSize() const
qreal maximumWidth() const
qreal minimumHeight() const
QSizeF minimumSize() const
qreal minimumWidth() const
bool ownedByLayout() const
QGraphicsLayoutItem *parentLayoutItem() const
qreal preferredHeight() const
QSizeF preferredSize() const
qreal preferredWidth() const
virtual void setGeometry(const QRectF &rect)
void setMaximumHeight(qreal height)
void setMaximumSize(const QSizeF &size)
void setMaximumSize(qreal w, qreal h)
void setMaximumWidth(qreal width)
void setMinimumHeight(qreal height)
void setMinimumSize(const QSizeF &size)
void setMinimumSize(qreal w, qreal h)
void setMinimumWidth(qreal width)
void setParentLayoutItem(QGraphicsLayoutItem *parent)
void setPreferredHeight(qreal height)
void setPreferredSize(const QSizeF &size)
void setPreferredSize(qreal w, qreal h)
void setPreferredWidth(qreal width)
void setSizePolicy(const QSizePolicy &policy)
void setSizePolicy(QSizePolicy::Policy hPolicy, QSizePolicy::Policy vPolicy, QSizePolicy::ControlType controlType = QSizePolicy::DefaultType)
QSizePolicy sizePolicy() const
virtual void updateGeometry()

受保护函数

void setGraphicsItem(QGraphicsItem *item)
void setOwnedByLayout(bool ownership)
virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const = 0

详细说明

QGraphicsLayoutItem 是一个抽象类,它定义了一组虚拟函数,用于描述由QGraphicsLayout 排列的任何对象的大小、大小策略和大小提示。该 API 包含与项目本身及其使用者均相关的函数,因为 QGraphicsLayoutItem 的大多数函数也是其子类的公共 API 的一部分。

在大多数情况下,现有的支持布局的类(如QGraphicsWidget 和QGraphicsLayout )已经提供了您所需的功能。不过,通过继承这些类,您可以创建既能与布局良好配合的图形元素(QGraphicsWidget ),也能创建自定义布局(QGraphicsLayout )。

继承 QGraphicsLayoutItem

如果您创建 QGraphicsLayoutItem 的子类并重写其虚函数,则布局将能够与包括QGraphicsWidget 和QGraphicsLayout 在内的其他 QGraphicsLayoutItem 一起调整您的项的大小并确定其位置。

你可以从重写重要函数开始:受保护的sizeHint()函数,以及公共的setGeometry()函数。如果你希望项目能够感知即时的几何变化,还可以重写updateGeometry()函数。

几何形状、尺寸提示和尺寸策略会影响项的大小和位置。调用setGeometry() 始终会立即调整项的大小和位置。通常,该函数由QGraphicsLayout 在布局激活后调用,但项的用户也可以随时调用它。

sizeHint() 函数返回该项的最小、首选和最大尺寸提示。您可以通过调用setMinimumSize()、setPreferredSize() 或setMaximumSize() 来覆盖这些属性。如果需要,您还可以使用setMinimumWidth() 或setMaximumHeight() 等函数仅设置宽度或高度组件。

另一方面,effectiveSizeHint() 函数会针对给定的Qt::SizeHint 返回一个大小提示,并保证返回的大小符合最小和最大尺寸以及大小提示的限制。您可以通过调用setSizePolicy() 来设置该项的垂直和水平大小策略。sizePolicy 属性由布局系统用于描述该项希望如何扩展或缩小。

嵌套 QGraphicsLayoutItems

QGraphicsLayoutItems 可以嵌套在其他 QGraphicsLayoutItems 之中,这类似于布局可以包含子布局的情况。实现方式有两种:一是将 QGraphicsLayoutItem 指针传递给 QGraphicsLayoutItem 的受保护构造函数,二是调用setParentLayoutItem() 函数。parentLayoutItem() 函数返回指向该项布局项父项的指针。如果该项的父项是 `nullptr `,或者父项未从 `QGraphicsItem` 继承,则 `parentLayoutItem()` 函数将返回 `nullptr`。当 QGraphicsLayoutItem 的子类本身是一个布局时,isLayout() 返回 `true `;否则返回 false。

Qt 使用 QGraphicsLayoutItem 在图形视图框架中提供布局功能,但未来其应用范围可能会扩展到 Qt 的其他部分。

另请参阅 QGraphicsWidget 、QGraphicsLayout 、QGraphicsLinearLayout 以及QGraphicsGridLayout 。

成员函数文档

QGraphicsLayoutItem::QGraphicsLayoutItem(QGraphicsLayoutItem *parent = nullptr, bool isLayout = false)

创建 QGraphicsLayoutItem 对象。parent 将成为该对象的父对象。如果isLayout 为真,则该项为布局;否则,isLayout 为假。

[virtual noexcept] QGraphicsLayoutItem::~QGraphicsLayoutItem()

销毁QGraphicsLayoutItem 对象。

QRectF QGraphicsLayoutItem::contentsRect() const

返回以本地坐标系表示的内容矩形。

内容矩形定义了关联布局在排列子项时所使用的子矩形。该函数是一个便捷函数,它会根据项的内容边距调整该项的 `geometry()` 返回值。请注意,`getContentsMargins()` 是一个虚函数,您可以重写该函数以返回项的内容边距。

另请参见 getContentsMargins() 和geometry()。

QSizeF QGraphicsLayoutItem::effectiveSizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const

返回此QGraphicsLayoutItem 的有效尺寸提示。

which 是所涉及的大小提示。constraint 是一个可选参数,用于在计算有效大小提示时定义特殊约束。默认情况下,constraint 的值为QSizeF(-1, -1),这意味着对大小提示没有约束。

若需为给定的宽度或高度指定控件的大小提示,可在constraint 中提供固定尺寸。这对于只能沿垂直或水平方向扩展,且需要将宽度或高度设置为特定值的控件非常有用。

例如,一个适配于 200 列宽的文本段落项可能会沿垂直方向扩展。您可以将 `QSizeF(200, -1)` 作为约束条件传入,以获得合适的最小、首选和最大高度。

您可以通过在QGraphicsLayoutItem 的子类中重写sizeHint()方法,或者调用以下函数之一来调整有效尺寸提示:setMinimumSize()、setPreferredSize 或setMaximumSize()(或两者的组合)。

该函数会缓存每个大小提示,并保证对于每个 `which ` 的值,`sizeHint()` 仅会被调用一次——除非未指定 `constraint ` 且已调用 `updateGeometry()`。

另请参阅 sizeHint()。

QRectF QGraphicsLayoutItem::geometry() const

返回该项的几何属性(例如位置和大小),返回类型为QRectF 。该函数与QRectF (pos()、size())等效。

另请参阅 setGeometry()。

[virtual] void QGraphicsLayoutItem::getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const

该虚拟函数为该QGraphicsLayoutItem 提供left 、top 、right 和bottom 的内容边距。默认实现假设所有内容边距均为0。参数指向存储在qreals中的值。如果任何指针为nullptr ,则该值将不会被更新。

另请参阅 QGraphicsWidget::setContentsMargins()。

QGraphicsItem *QGraphicsLayoutItem::graphicsItem() const

返回该布局项所代表的QGraphicsItem 。对于QGraphicsWidget ,它将返回其自身;对于自定义项,它可能返回一个聚合值。

另请参阅 setGraphicsItem()。

[virtual, since 6.0] bool QGraphicsLayoutItem::isEmpty() const

如果该项为空(即没有内容且不应占用任何空间),则返回true 。

默认实现会在项目被隐藏时返回 `true ` 为 true,除非其 `size policy ` 的 `retainSizeWhenHidden` 属性被设置为true

该函数于 Qt 6.0 中引入。

另请参阅 sizePolicy()。

bool QGraphicsLayoutItem::isLayout() const

如果该 `QGraphicsLayoutItem ` 是一个布局(例如,被一个负责排列其他 `QGraphicsLayoutItem ` 对象的对象继承),则返回 `true `;否则返回 `false`。

另请参阅 QGraphicsLayout 。

qreal QGraphicsLayoutItem::maximumHeight() const

返回最大高度。

另请参阅 setMaximumHeight()、setMaximumSize(),以及maximumSize()。

QSizeF QGraphicsLayoutItem::maximumSize() const

返回最大大小。

另请参阅 setMaximumSize()、minimumSize()、preferredSize()、Qt::MaximumSize 以及sizeHint()。

qreal QGraphicsLayoutItem::maximumWidth() const

返回最大宽度。

另请参阅 setMaximumWidth()、setMaximumSize() 和maximumSize()。

qreal QGraphicsLayoutItem::minimumHeight() const

返回最小高度。

另请参阅 setMinimumHeight()、setMinimumSize() 和minimumSize()。

QSizeF QGraphicsLayoutItem::minimumSize() const

返回最小大小。

另请参阅 setMinimumSize()、preferredSize()、maximumSize()、Qt::MinimumSize 以及sizeHint()。

qreal QGraphicsLayoutItem::minimumWidth() const

返回最小宽度。

另请参阅 setMinimumWidth()、setMinimumSize(),以及minimumSize()。

bool QGraphicsLayoutItem::ownedByLayout() const

返回该布局是否应在其析构函数中删除此项。如果为 true,则布局将删除该项;如果为 false,则假定该项由另一个对象拥有,布局将不会删除此项。

如果该项同时继承了QGraphicsItem 和QGraphicsLayoutItem (例如QGraphicsWidget ),则该项实际上属于两个所有权层次结构。此属性用于告知布局在销毁时应如何处理其子项。 对于QGraphicsWidget ,首选的做法是:当布局被删除时,不删除其子项(因为它们也是图形项层次结构的一部分)。

默认情况下,该值在QGraphicsLayoutItem 中初始化为false,但会被QGraphicsLayout 重写为true。这是因为QGraphicsLayout 通常不属于QGraphicsItem 的层次结构,因此父布局应将其删除。子类可以通过调用setOwnedByLayout(true)来覆盖此默认行为。

另请参阅 setOwnedByLayout()。

QGraphicsLayoutItem *QGraphicsLayoutItem::parentLayoutItem() const

返回此QGraphicsLayoutItem 的父类;若无父类,或父类未从QGraphicsLayoutItem 继承,则返回nullptr (QGraphicsLayoutItem 通常通过与QObject 派生类的多重继承被使用)。

另请参阅 setParentLayoutItem()。

qreal QGraphicsLayoutItem::preferredHeight() const

返回首选高度。

另请参阅 setPreferredHeight()、setPreferredSize() 和preferredSize()。

QSizeF QGraphicsLayoutItem::preferredSize() const

返回首选大小。

另请参阅 setPreferredSize()、minimumSize()、maximumSize()、Qt::PreferredSize 以及sizeHint()。

qreal QGraphicsLayoutItem::preferredWidth() const

返回首选宽度。

另请参阅 setPreferredWidth()、setPreferredSize() 和preferredSize()。

[virtual] void QGraphicsLayoutItem::setGeometry(const QRectF &rect)

此虚拟函数将QGraphicsLayoutItem 的几何信息设置为rect ,该坐标系采用父级坐标系(例如,rect 的左上角等同于该项在父级坐标系中的位置)。

您必须在QGraphicsLayoutItem 的子类中重写此函数,才能接收几何信息更新。布局在进行重新排列时会调用此函数。

如果rect 超出minimumSize 和maximumSize 的边界,它将被调整为最接近的尺寸,以确保其位于合法边界内。

另请参阅 geometry()。

[protected] void QGraphicsLayoutItem::setGraphicsItem(QGraphicsItem *item)

如果QGraphicsLayoutItem 表示一个QGraphicsItem ,并且希望利用QGraphicsLayout 的自动重新归属功能,则应设置此值。请注意,如果删除了item 但未删除布局项,则必须自行调用setGraphicsItem(nullptr),以避免产生悬空指针。

另请参阅 graphicsItem()。

void QGraphicsLayoutItem::setMaximumHeight(qreal height)

将最大高度设置为height 。

另请参阅 maximumHeight()、setMaximumSize() 和maximumSize()。

void QGraphicsLayoutItem::setMaximumSize(const QSizeF &size)

将最大大小设置为size 。该属性会覆盖Qt::MaximumSize 中的sizeHint() 方法,并确保effectiveSizeHint() 返回的大小永远不会大于size 。若要取消设置最大大小,请使用一个无效的大小。

另请参阅 maximumSize()、minimumSize()、preferredSize()、Qt::MaximumSize 以及sizeHint()。

void QGraphicsLayoutItem::setMaximumSize(qreal w, qreal h)

此便捷函数等同于调用 setMaximumSize(QSizeF(w,h))。

另请参阅 maximumSize()、setMinimumSize()、setPreferredSize() 以及sizeHint()。

void QGraphicsLayoutItem::setMaximumWidth(qreal width)

将最大宽度设置为width 。

另请参阅 maximumWidth()、setMaximumSize() 和maximumSize()。

void QGraphicsLayoutItem::setMinimumHeight(qreal height)

将最小高度设置为height 。

另请参阅 minimumHeight()、setMinimumSize() 和minimumSize()。

void QGraphicsLayoutItem::setMinimumSize(const QSizeF &size)

将最小尺寸设置为size 。该属性会覆盖Qt::MinimumSize 中的sizeHint(),并确保effectiveSizeHint() 返回的尺寸永远不会小于size 。若要取消设置最小尺寸,请使用一个无效的尺寸。

另请参阅 minimumSize()、maximumSize()、preferredSize()、Qt::MinimumSize 、sizeHint()、setMinimumWidth() 以及setMinimumHeight()。

void QGraphicsLayoutItem::setMinimumSize(qreal w, qreal h)

此便捷函数等同于调用 setMinimumSize(QSizeF(w,h))。

另请参阅 minimumSize()、setMaximumSize()、setPreferredSize() 以及sizeHint()。

void QGraphicsLayoutItem::setMinimumWidth(qreal width)

将最小宽度设置为width 。

另请参阅 minimumWidth()、setMinimumSize() 和minimumSize()。

[protected] void QGraphicsLayoutItem::setOwnedByLayout(bool ownership)

设置布局是否应在其析构函数中删除此项。若要使布局删除该项,ownership 必须为 true。

另请参阅 ownedByLayout()。

void QGraphicsLayoutItem::setParentLayoutItem(QGraphicsLayoutItem *parent)

将此QGraphicsLayoutItem 的父对象设置为parent 。

另请参阅 parentLayoutItem()。

void QGraphicsLayoutItem::setPreferredHeight(qreal height)

将首选高度设置为height 。

另请参阅 preferredHeight()、preferredWidth()、setPreferredSize() 以及preferredSize()。

void QGraphicsLayoutItem::setPreferredSize(const QSizeF &size)

将首选大小设置为size 。该属性会覆盖Qt::PreferredSize 中的sizeHint(),并为effectiveSizeHint() 提供默认值。若要取消设置首选大小,请使用一个无效的大小值。

另请参阅 preferredSize()、minimumSize()、maximumSize()、Qt::PreferredSize 以及sizeHint()。

void QGraphicsLayoutItem::setPreferredSize(qreal w, qreal h)

此便捷函数等同于调用 setPreferredSize(QSizeF(w,h))。

另请参阅 preferredSize()、setMaximumSize()、setMinimumSize() 以及sizeHint()。

void QGraphicsLayoutItem::setPreferredWidth(qreal width)

将首选宽度设置为width 。

另请参阅 preferredWidth()、preferredHeight()、setPreferredSize() 以及preferredSize()。

void QGraphicsLayoutItem::setSizePolicy(const QSizePolicy &policy)

将尺寸策略设置为policy 。该尺寸策略描述了项目在布局中排列时,应如何在水平和垂直方向上扩展。

QGraphicsLayoutItem的默认尺寸策略为 (QSizePolicy::Fixed,QSizePolicy::Fixed,QSizePolicy::DefaultType),但子类通常会更改该默认值。例如,QGraphicsWidget 的默认值为 (QSizePolicy::Preferred,QSizePolicy::Preferred,QSizePolicy::DefaultType)。

另请参阅 sizePolicy() 和QWidget::sizePolicy()。

void QGraphicsLayoutItem::setSizePolicy(QSizePolicy::Policy hPolicy, QSizePolicy::Policy vPolicy, QSizePolicy::ControlType controlType = QSizePolicy::DefaultType)

该函数相当于调用 setSizePolicy(QSizePolicy(hPolicy,vPolicy,controlType))。

这是一个重载函数。

另请参见 sizePolicy() 和QWidget::sizePolicy()。

[pure virtual protected] QSizeF QGraphicsLayoutItem::sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const

此纯虚拟函数返回QGraphicsLayoutItem 中which 的大小提示,并使用constraint 的宽度或高度来限制输出。

请在QGraphicsLayoutItem 的子类中重写此函数,以提供项目所需的大小提示。

另请参阅 effectiveSizeHint()。

QSizePolicy QGraphicsLayoutItem::sizePolicy() const

返回当前的大小策略。

另请参阅 setSizePolicy() 和QWidget::sizePolicy()。

[virtual] void QGraphicsLayoutItem::updateGeometry()

此虚拟函数会清除任何已缓存的大小提示信息。如果更改了sizeHint()函数的返回值,应始终调用此函数。子类在重写此函数时,必须始终调用基类的实现。

另请参阅 effectiveSizeHint()。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.