QGraphicsLayoutItem Class

可以继承 QGraphicsLayoutItem 类,以便通过布局管理自定义项目。更多

Header: #include <QGraphicsLayoutItem>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
继承于

QGraphicsLayoutQGraphicsWidget

公共函数

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 排列的对象的尺寸、尺寸策略和尺寸提示。由于 QGraphicsLayoutItem 的大部分函数也是子类公共 API 的一部分,因此该 API 包含了与项目本身和项目用户相关的函数。

在大多数情况下,现有的布局感知类(如QGraphicsWidgetQGraphicsLayout )已经提供了您所需的功能。不过,通过子类化这些类,您可以创建与布局(QGraphicsWidget )或自定义布局(QGraphicsLayout )配合使用的图形元素。

子类化 QGraphicsLayoutItem

如果你创建了 QGraphicsLayoutItem 的子类并重新实现了它的虚拟函数,你就可以让布局与其他 QGraphicsLayoutItems(包括QGraphicsWidgetQGraphicsLayout )一起调整项目的大小和位置。

您可以从重新实现以下重要函数开始:受保护的sizeHint() 函数和公共setGeometry() 函数。如果您希望您的项目能立即感知几何体的变化,也可以重新实现updateGeometry() 。

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

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

另一方面,effectiveSizeHint() 函数会返回任何给定Qt::SizeHint 的尺寸提示,并保证返回的尺寸与最小和最大尺寸以及尺寸提示绑定。您可以通过调用setSizePolicy() 设置项目的垂直和水平尺寸策略。布局系统使用sizePolicy 属性来描述该项目喜欢的增长或收缩方式。

嵌套 QGraphicsLayoutItems

QGraphicsLayoutItems 可以嵌套在其他 QGraphicsLayoutItems 中,就像布局可以包含子布局一样。这可以通过向 QGraphicsLayoutItem 的受保护构造函数传递 QGraphicsLayoutItem 指针或调用setParentLayoutItem() 来实现。parentLayoutItem() 函数返回指向项目的 layoutItem 父节点的指针。如果项的父类是nullptr ,或者父类没有继承自QGraphicsItem ,则parentLayoutItem() 函数会返回nullptr 。如果 QGraphicsLayoutItem 子类本身是一个布局,则isLayout() 会返回true ,否则返回 false。

Qt 使用 QGraphicsLayoutItem 在图形视图框架(Graphics View Framework)中提供布局功能,但将来它的使用可能会遍及整个 Qt 本身。

另请参见 QGraphicsWidget,QGraphicsLayout,QGraphicsLinearLayout, 和QGraphicsGridLayout

成员函数文档

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

构造 QGraphicsLayoutItem 对象。parent 将成为该对象的父对象。如果isLayout 为 true,则该项目是一个布局,否则isLayout 为 false。

[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 是一个可选参数,用于定义计算有效尺寸提示时的特殊约束。默认情况下, 是 (-1, -1) ,这意味着对尺寸提示没有约束。constraint QSizeF

如果要为给定的宽度或高度指定部件的尺寸提示,可以在constraint 中提供固定尺寸。这对于只能在垂直或水平方向上增长,并需要将宽度或高度设置为特殊值的部件非常有用。

例如,适合列宽为 200 的文本段落项目可以垂直增长。您可以通过QSizeF(200, -1) 作为约束条件,以获得合适的最小、首选和最大高度)。

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

该函数会缓存每个大小提示,并保证sizeHint() 只会为which 的每个值调用一次,除非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,rightbottom 内容页边距。默认实现假定所有内容边距都为 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,则假定另一个对象拥有该项的所有权,布局不会删除该项。

如果该项目同时继承了QGraphicsItemQGraphicsLayoutItem (如QGraphicsWidget ),则该项目实际上是两个所有权层次结构的一部分。该属性告知布局在销毁时应如何处理其子项。在QGraphicsWidget 的情况下,删除布局时最好不要删除其子项(因为它们也是图形项层次结构的一部分)。

QGraphicsLayoutItem 中,该值默认初始化为 false,但在QGraphicsLayout 中被重写为返回 true。这是因为QGraphicsLayout 通常不是QGraphicsItem 层次结构的一部分,所以父布局应删除它。子类可以通过调用setOwnedByLayout(true) 来覆盖这一默认行为。

另请参阅 setOwnedByLayout().

QGraphicsLayoutItem *QGraphicsLayoutItem::parentLayoutItem() const

返回QGraphicsLayoutItem 的父类,如果没有父类,或父类没有继承于QGraphicsLayoutItem ,则返回nullptrQGraphicsLayoutItem 通常通过与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 超出了minimumSizemaximumSize 的范围,它将被调整为最接近的尺寸,以便在合法范围内。

另请参见 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 。该属性覆盖sizeHint() 的Qt::MaximumSize ,并确保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 。该属性覆盖sizeHint() 的Qt::MinimumSize ,并确保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::PreferredSizesizeHint() 并为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 。尺寸策略描述了项目在布局中排列时的水平和垂直增长方式。

QGraphicsLayoutItemQSizePolicy::Fixed 的默认大小策略是 ( , , ) ,但子类通常会更改默认值。例如, 默认为 ( , , )。QSizePolicy::Fixed QSizePolicy::DefaultType QGraphicsWidgetQSizePolicy::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

此纯虚拟函数返回whichQGraphicsLayoutItem 的尺寸提示,使用constraint 的宽度或高度来限制输出。

请在QGraphicsLayoutItem 的子类中重新实现此函数,以便为您的项目提供必要的尺寸提示。

另请参阅 effectiveSizeHint()。

QSizePolicy QGraphicsLayoutItem::sizePolicy() const

返回当前大小策略。

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

[virtual] void QGraphicsLayoutItem::updateGeometry()

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

另请参阅 effectiveSizeHint()。

© 2025 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.