QGraphicsWidget 类

The QGraphicsWidget class is the base class for all widget items in a QGraphicsScene. 更多...

头文件 #include <QGraphicsWidget>
CMakefind_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmakeQT += widgets
Inherits QGraphicsObjectQGraphicsLayoutItem
Inherited By

QGraphicsProxyWidget

公共类型

枚举匿名 { Type }

属性

公共函数

QGraphicsWidget(QGraphicsItem *parent = nullptr, Qt::WindowFlags wFlags = Qt::WindowFlags())
virtual~QGraphicsWidget()
QList<QAction *>actions() const
voidaddAction(QAction *action)
voidaddActions(const QList<QAction *> &actions)
voidadjustSize()
boolautoFillBackground() const
Qt::FocusPolicyfocusPolicy() const
QGraphicsWidget *focusWidget() const
QFontfont() const
voidgetWindowFrameMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const
intgrabShortcut(const QKeySequence &sequence, Qt::ShortcutContext context = Qt::WindowShortcut)
voidinsertAction(QAction *before, QAction *action)
voidinsertActions(QAction *before, const QListactions)
boolisActiveWindow() const
QGraphicsLayout *layout() const
Qt::LayoutDirectionlayoutDirection() const
virtual voidpaintWindowFrame(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr)
QPalettepalette() const
QRectFrect() const
voidreleaseShortcut(int id)
voidremoveAction(QAction *action)
voidresize(const QSizeF &size)
voidresize(qreal w, qreal h)
voidsetAttribute(Qt::WidgetAttribute attribute, bool on = true)
voidsetAutoFillBackground(bool enabled)
voidsetContentsMargins(QMarginsF margins)
voidsetContentsMargins(qreal left, qreal top, qreal right, qreal bottom)
voidsetFocusPolicy(Qt::FocusPolicy policy)
voidsetFont(const QFont &font)
voidsetGeometry(qreal x, qreal y, qreal w, qreal h)
voidsetLayout(QGraphicsLayout *layout)
voidsetLayoutDirection(Qt::LayoutDirection direction)
voidsetPalette(const QPalette &palette)
voidsetShortcutAutoRepeat(int id, bool enabled = true)
voidsetShortcutEnabled(int id, bool enabled = true)
voidsetStyle(QStyle *style)
voidsetWindowFlags(Qt::WindowFlags wFlags)
voidsetWindowFrameMargins(QMarginsF margins)
voidsetWindowFrameMargins(qreal left, qreal top, qreal right, qreal bottom)
voidsetWindowTitle(const QString &title)
QSizeFsize() const
QStyle *style() const
booltestAttribute(Qt::WidgetAttribute attribute) const
voidunsetLayoutDirection()
voidunsetWindowFrameMargins()
Qt::WindowFlagswindowFlags() const
QRectFwindowFrameGeometry() const
QRectFwindowFrameRect() const
QStringwindowTitle() const
Qt::WindowTypewindowType() const

重新实现公共函数

virtual QRectFboundingRect() const override
virtual voidgetContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const override
virtual voidpaint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override
virtual voidsetGeometry(const QRectF &rect) override
虚拟 QPainterPathshape() const override
虚拟 inttype() const override

公共槽位

bool关闭()

信号

静态公共成员

voidsetTabOrder(QGraphicsWidget *first, QGraphicsWidget *second)

受保护的函数

virtual voidchangeEvent(QEvent *event)
virtual voidcloseEvent(QCloseEvent *event)
虚拟 boolfocusNextPrevChild(bool next)
virtual voidgrabKeyboardEvent(QEvent *event)
virtual voidgrabMouseEvent(QEvent *event)
virtual voidhideEvent(QHideEvent *event)
virtual voidinitStyleOption(QStyleOption *option) const
virtual voidmoveEvent(QGraphicsSceneMoveEvent *event)
virtual voidpolishEvent()
virtual voidresizeEvent(QGraphicsSceneResizeEvent *event)
virtual voidshowEvent(QShowEvent *event)
virtual voidungrabKeyboardEvent(QEvent *event)
virtual voidungrabMouseEvent(QEvent *event)
虚拟 boolwindowFrameEvent(QEvent *event)
虚拟 Qt::WindowFrameSectionwindowFrameSectionAt(const QPointF &pos) const

重实现的保护函数

虚拟 boolevent(QEvent *event) override
virtual voidfocusInEvent(QFocusEvent *event) override
virtual voidfocusOutEvent(QFocusEvent *event) override
virtual voidhoverLeaveEvent(QGraphicsSceneHoverEvent *event) override
virtual voidhoverMoveEvent(QGraphicsSceneHoverEvent *event) override
虚拟 QVariantitemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) override
虚拟 boolsceneEvent(QEvent *event) override
虚拟 QSizeFsizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const override
virtual voidupdateGeometry() override

详细描述

QGraphicsWidget 是一个扩展的基础项,它提供了比 QGraphicsItem 更多的功能。它在许多方面类似于 QWidget

QGraphicsItem 不同,QGraphicsWidget 不是一个抽象类;您可以创建 QGraphicsWidget 的实例而不必对其进行子类化。这种做法适用于仅用于组织子小部件布局的控件。

QGraphicsWidget 可用作您自定义项目的基类,如果您需要高级输入焦点处理功能,例如制表符焦点和激活,或布局。

由于 QGraphicsWidget 与 QWidget 相似,API 也相似,因此将 QWidget 移植到 QGraphicsWidget 比移植到 QGraphicsItem 更容易。

注意:基于 QWidget 的控件可以直接通过 QGraphicsProxyWidget 嵌入到 QGraphicsScene 中。

与 QWidget 相比,QGraphicsWidget 的显著差异包括

QGraphicsWidgetQWidget
坐标和几何形状使用 qreals(根据平台为双精度浮点数或浮点数)定义。QWidget 使用整数几何形状(QPoint、QRect)。
控件默认可见;您无需调用 show() 来显示控件。QWidget 默认隐藏,直到您调用 show()。
支持控件属性的一部分。支持所有控件属性。
顶层项目的样式默认为 QGraphicsScene::style顶层控件的样式默认为 QApplication::style
图形视口提供了与 QWidget 不同的自定义拖放框架。标准拖放框架。
控件项目不支持模式。完全支持模式。

QGraphicsWidget 支持Qt的控件属性子集(Qt::WidgetAttribute),如下表所示。表中未列出的属性不受支持或未使用。

控件属性用法
Qt::WA_SetLayoutDirection由 setLayoutDirection() 设置,由 unsetLayoutDirection() 清除。您可以通过测试此属性来检查控件是否已显式分配了设置方向。如果没有设置此属性,则 layoutDirection() 继承。
Qt::WA_RightToLeft由 setLayoutDirection() 切换。从父级/场景继承。如果设置,控件布局将按从右到左的顺序排列水平排列的控件。
Qt::WA_SetStyle由 setStyle() 设置和清除。如果设置此属性,则控件已显式分配了样式。如果未设置,控件将使用场景或应用程序的样式。
Qt::WA_Resized由 setGeometry() 和 resize() 设置。
Qt::WA_SetPalette由 setPalette() 设置。
Qt::WA_SetFont由 setFont() 设置。
Qt::WA_WindowPropagation启用向窗口控件传播。

虽然 QGraphicsWidget 继承自 QObject 和 QGraphicsItem,但您应使用 QGraphicsItem 提供的函数(而不是 QObject),来管理父子项目之间的关系。这些函数控制项目的堆叠顺序以及其所有者。

注意:QObject::parent() 应始终为 QGraphicsWidgets 返回 nullptr,但这种策略没有严格定义。

另请参阅 QGraphicsProxyWidgetQGraphicsItem以及小部件和布局

成员类型文档

enum QGraphicsWidget::匿名

虚拟type()函数返回的值。

常量描述
QGraphicsWidget::Type11图形小部件项

属性文档

autoFillBackground : bool

此属性表示小部件背景是否自动填充

如果启用,则此属性会导致Qt在调用paint()方法之前填充小部件的背景。使用的颜色由小部件的调色板中的QPalette::Window颜色角色定义。

此外,除非设置了WA_OpaquePaintEvent或WA_NoSystemBackground属性,否则窗口总是填充QPalette::Window

默认情况下,此属性为false

访问函数

boolautoFillBackground() const
voidsetAutoFillBackground(bool enabled)

另请参阅 Qt::WA_OpaquePaintEventQt::WA_NoSystemBackground

focusPolicy : Qt::FocusPolicy

此属性表示小部件接受键盘焦点的方式

如果小部件可以通过Tab键接受焦点,则焦点策略为Qt::TabFocus;如果可以通过单击接受焦点,则焦点策略为Qt::ClickFocus;如果两者都接受,则焦点策略为Qt::StrongFocus;如果没有接受焦点,则焦点策略为Qt::NoFocus(默认)。

如果小部件处理键盘事件,则必须启用键盘焦点。通常在构造函数中这样做。例如,QLineEdit构造函数调用setFocusPolicy(Qt::StrongFocus)。

如果启用焦点策略(即不是Qt::NoFocus),则QGraphicsWidget将自动启用ItemIsFocusable标志。将Qt::NoFocus设置为小部件会清除ItemIsFocusable标志。如果小部件当前具有键盘焦点,则小部件将自动失去焦点。

访问函数

Qt::FocusPolicyfocusPolicy() const
voidsetFocusPolicy(Qt::FocusPolicy policy)

另请参阅 focusInEventfocusOutEventkeyPressEventkeyReleaseEvent以及enabled

font : QFont

此属性表示小部件的字体

此属性提供了小部件的字体。

QFont由显式定义的字体属性和从小部件的父级继承的属性组成。因此,font()可以返回与使用setFont()设置的字体不同的字体。这种方案允许您在不影响继承的字体条目的情况下定义字体的单个条目。

当一个组件的字体更改时,它会将其条目与其父组件进行解析。如果组件没有父组件,它会将其条目与场景进行解析。然后,组件向自己发送一个FontChange事件,并通知所有后代,以便他们也能解析字体。

默认情况下,此属性包含应用程序的默认字体。

访问函数

QFontfont() const
voidsetFont(const QFont &font)

另请参阅QApplication::font(),QGraphicsScene::fontQFont::resolve

geometry : QRectF

此属性持有组件的几何形状

将项的几何形状设置为rect。调用此函数后,项的位置和大小会发生变化。项首先移动,然后调整大小。

调用此函数的副作用是组件将收到一个移动事件和一个调整大小事件。此外,如果组件有布局分配,则布局将激活。

访问函数

virtual voidsetGeometry(const QRectF &rect) override
voidsetGeometry(qreal x, qreal y, qreal w, qreal h)

通知信号

另请参阅geometry()和resize

layout : QGraphicsLayout*

此属性持有组件的布局

在分配新布局之前,删除任何现有的布局管理器。如果layoutnullptr,则组件将保留没有布局。现有子组件的几何形状将不受影响。

QGraphicsWidget 拥有 layout 的所有权。

目前由layout或所有其子布局管理的所有组件都将自动移动到该组件。然后,布局变得无效,并根据此组件的geometry() 和 contentsMargins() 调整子组件的几何形状。没有明确由layout管理的子组件在分配给该组件后将不受布局的影响。

如果没有布局当前管理此组件,则 layout() 将返回 nullptr

访问函数

QGraphicsLayout *layout() const
void

通知信号

voidlayoutChanged()

此属性持有此组件的布局方向。

此属性修改了此组件及其所有后代的Qt::WA_RightToLeft属性。它还设置此组件的Qt::WA_SetLayoutDirection属性。

访问函数

Qt::LayoutDirection
voidsetLayoutDirection(Qt::LayoutDirection direction)
voidunsetLayoutDirection()

另请参阅 QWidget::layoutDirectionQApplication::layoutDirection.

maximumSize : const QSizeF

此属性存储小部件的最大大小

另请参阅 setMaximumSize(),maximumSize(),minimumSizepreferredSize.

minimumSize : const QSizeF

此属性存储小部件的最小大小

另请参阅 setMinimumSize(),minimumSize(),preferredSizemaximumSize.

palette : QPalette

此属性存储小部件的调色板

此属性提供了小部件的调色板。调色板提供彩色组和状态的颜色和画笔(例如,QPalette::Button)和状态(例如,QPalette::Inactive),大致定义了小部件及其子 itens的外观。

QPalette 由显式定义的彩色组和从父小部件隐式继承的组组成。因此,palette() 可能返回与使用 setPalette() 设置的调色板不同的调色板。这种方案允许您在不影响调色板的继承项的情况下定义调色板中的单个条目。

当小部件的调色板更改时,它对其父小部件或没有父小部件的情况下的场景进行处理。然后它向自己发送一个 PaletteChange 事件,并通知所有其后代,以便它们可以解决其调色板。

默认情况下,此属性包含应用程序的默认调色板。

访问函数

QPalettepalette() const
voidsetPalette(const QPalette &palette)

另请参阅 QGuiApplication::paletteQGraphicsScene::paletteQPalette::resolve.

preferredSize : const QSizeF

此属性存储小部件的首选大小

另请参阅 setPreferredSize(),preferredSize(),minimumSizemaximumSize.

size : QSizeF

此属性存储小部件的大小

调用 resize() 将小部件的大小调整为 size,该大小受 minimumSize() 和 maximumSize() 的限制。此属性仅影响小部件的宽度和高度(例如,其右侧和底部边缘);小部件的位置和左上角不受影响。

调整小部件的大小时,将触发小部件立即接收到带有旧大小和新大小的 GraphicsSceneResize 事件。如果有布局被分配,则事件到达时将激活布局,并自动更新任何子元素的几何形状。

该属性不影响父小部件的布局。如果小部件本身由父布局管理;例如,它有一个具有布局分配的父小部件,则不会激活该布局。

默认情况下,此属性包含一个宽度为0、高度为0的大小。

访问函数

QSizeFsize() const
voidresize(const QSizeF &size)
voidresize(qreal w, qreal h)

通知信号

另请参阅 setGeometry(),QGraphicsSceneResizeEventQGraphicsLayout

sizePolicy : const QSizePolicy

此属性保存了小部件的大小策略。

另请参阅 sizePolicysetSizePolicyQWidget::sizePolicy

windowFlags : Qt::WindowFlags

此属性保存了小部件的窗口标志。

窗口标志是窗口类型(例如,Qt::Dialog)和提供对窗口行为提示的几个标志的组合。行为依赖于平台。

默认情况下,此属性不包含任何窗口标志。

窗口是面板。如果您设置了Qt::Window标志,自动设置ItemIsPanel标志。如果您清除了Qt::Window标志,ItemIsPanel标志也将被清除。请注意,可以独立于Qt::Window设置ItemIsPanel标志。

访问函数

Qt::WindowFlagswindowFlags() const
voidsetWindowFlags(Qt::WindowFlags wFlags)

另请参阅 isWindow() 和 isPanel

windowTitle : QString

此属性保存窗口标题(标题栏)。

此属性仅用于窗口。

默认情况下,如果未设置标题,则此属性包含空字符串。

访问函数

QStringwindowTitle() const
voidsetWindowTitle(const QString &title)

成员函数文档

QGraphicsWidget::QGraphicsWidget(QGraphicsItem *parent = nullptr, Qt::WindowFlags wFlags = Qt::WindowFlags())

构造一个QGraphicsWidget实例。可选的parent参数传递给QGraphicsItem的构造函数。可选的wFlags参数指定小部件的窗口标志(例如,小部件是否应为窗口、工具、弹出等)。

[虚函数 noexcept] QGraphicsWidget::~QGraphicsWidget()

销毁QGraphicsWidget实例。

QList<QAction *> QGraphicsWidget::actions() const

返回此小部件操作的列表(可能是空的)。

另请参阅insertAction(),removeAction(),QWidget::actions(),QAction::associatedWidgets()和QAction::associatedGraphicsWidgets

void QGraphicsWidget::addAction(QAction *action)

将操作action追加到此小部件的操作列表中。

所有QGraphicsWidgets都有一个操作列表(如actions()返回的),但它们可以用许多不同的方式表示为图形。默认用途是将QAction列表(如actionsQMenu

QGraphicsWidget应只具有每种操作的其中一个,添加已存在的操作不会在组件中出现两次相同的操作。

另请参阅removeAction(),insertAction(),actions()和QWidget::addAction()。

void QGraphicsWidget::addActions(const QList<QAction *> &actions)

将操作actions追加到此小部件的操作列表中。

另请参阅removeAction(),QMenuaddAction(),和QWidget::addActions()。

void QGraphicsWidget::adjustSize()

调整组件的大小到其有效的首选提示大小。

当项目首次显示时,会隐式调用此函数。

另请参阅effectiveSizeHint()和Qt::MinimumSize

[覆盖虚函数] QRectF QGraphicsWidget::boundingRect() const

重新实现: QGraphicsItem::boundingRect() const

[虚拟受保护] void QGraphicsWidget::changeEvent(QEvent *event)

可以通过重新实现此事件处理程序来处理状态变化。

事件中状态变化的可以随event一起检索。

更改事件包括: QEvent::ActivationChangeQEvent::EnabledChangeQEvent::FontChangeQEvent::StyleChangeQEvent::PaletteChangeQEvent::ParentChangeQEvent::LayoutDirectionChangeQEvent::ContentsRectChange

[槽函数] bool QGraphicsWidget::close()

调用此函数以关闭组件。

如果组件已关闭,则返回true;否则返回false。此槽函数首先发送一个QCloseEvent到组件,该事件可能被接受或忽略。如果事件被忽略,则不发生任何事情。如果事件被接受,则隐藏()组件。

如果小部件设置了 Qt::WA_DeleteOnClose 属性,它将被删除。

[虚拟受保护] void QGraphicsWidget::closeEvent(QCloseEvent *event)

此事件处理程序,对于 事件,可以在子类中重新实现以接收小部件关闭事件。默认实现接受此事件。

另请参阅close() 和 QCloseEvent

[覆盖虚拟受保护] bool QGraphicsWidget::event(QEvent *event)

重新实现: QGraphicsObject::event(QEvent *ev)。

处理 事件QGraphicsWidget 处理以下事件

事件用法
磨光小部件显示后,经过一段时间后送达。
GraphicsSceneMove小部件的本地位置更改后,送达到小部件。
GraphicsSceneResize小部件的大小更改后,送达到小部件。
Show在显示之前送达到小部件。
隐藏隐藏后送达到小部件。
PaletteChange小部件的调色板更改后,送达到小部件。
FontChange小部件的字体更改后,送达到小部件。
EnabledChange小部件的启用状态更改后,送达到小部件。
StyleChange小部件的样式更改后,送达到小部件。
LayoutDirectionChange小部件的布局方向更改后,送达到小部件。
ContentsRectChange小部件的内容边距/内容矩形更改后,送达到小部件。

[覆盖虚拟受保护] void QGraphicsWidget::focusInEvent(QFocusEvent *event)

重新实现: QGraphicsItem::focusInEvent(QFocusEvent *event)。

[虚拟受保护] bool QGraphicsWidget::focusNextPrevChild(bool next)

根据需要查找要提供键盘焦点的新小部件,并且返回 true 如果可以找到新小部件;否则返回 false。如果 next 为 true,则此函数向前搜索;如果 next 为 false,则搜索向后。

有时,您可能希望重构此函数来为您的小部件及其子小部件提供特殊焦点处理。例如,网页浏览器可能重新实现它来向前或向后移动当前活动链接,并且仅在达到页面上的最后一个或第一个链接时调用基本实现。

子小部件在其父小部件上调用 focusNextPrevChild(),但只有包含子小部件的窗口决定将焦点重定向到哪里。通过重新实现此函数的对象,您可以控制所有子小部件的焦点遍历。

另请参阅focusPolicy

[覆盖虚拟受保护] void QGraphicsWidget::focusOutEvent(QFocusEvent *event)

重新实现: QGraphicsItem::focusOutEvent(QFocusEvent *event)。

QGraphicsWidget *QGraphicsWidget::focusWidget() const

如果此小部件或其子或后代小部件目前具有输入焦点,此函数将返回对该小部件的指针。如果没有后代小部件具有输入焦点,则返回 nullptr

也见QGraphicsItem::focusItem() 和 QWidget::focusWidget

[signal] void QGraphicsWidget::geometryChanged()

每当在 setGeometry() 中更改几何形状时,都将发出此信号。

注意:属性 geometry 的通知信号。属性 size 的通知信号。

[覆盖虚拟] void QGraphicsWidget::getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const

重新实现:QGraphicsLayoutItem::getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const.

获取小部件的内容边距。边距存储在 lefttoprightbottom 中,作为 qreals 的指针。每个参数可以通过传递 nullptr省略

也见setContentsMargins

void QGraphicsWidget::getWindowFrameMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const

获取小部件的窗口框架边距。边距作为指针存储在 lefttoprightbottom 中,指向 qreals。每个参数可以通过传递 nullptr省略

也见setWindowFrameMargins() 和 windowFrameRect

[虚拟保护] void QGraphicsWidget::grabKeyboardEvent(QEvent *event)

此事件处理程序,对于 event,可以在子类中重新实现以接收有关 QEvent::GrabKeyboard 事件的通知。

也见grabKeyboard() 和 grabMouse

[虚拟保护] void QGraphicsWidget::grabMouseEvent(QEvent *event)

此事件处理程序,对于 event,可以在子类中重新实现以接收有关 QEvent::GrabMouse 事件的通知。

也见grabMouse() 和 grabKeyboard

int QGraphicsWidget::grabShortcut(const QKeySequence &sequence, Qt::ShortcutContext context = Qt::WindowShortcut)

将快捷方式添加到Qt的快捷方式系统中,用于监视给定上下文中的指定 键序列。如果 上下文Qt::ApplicationShortcut,则快捷方式应用于整个应用程序。否则,它要么是此小部件本地的,Qt::WidgetShortcut,要么是窗口自身,Qt::WindowShortcut。对于不属于窗口(即顶层小部件及其子项)的小部件,Qt::WindowShortcut 快捷方式应用于场景。

如果多个小部件已经抓取了相同的键 序列,当键 序列 发生时,将向所有相关的小部件发送一个 QEvent::Shortcut 事件,但顺序非确定,并设置“模糊”标志为 true。

警告:通常您不需要使用此函数;相反,创建带有您所需的快捷键序列的 QAction(如果您还需要等价菜单选项和工具栏按钮),或者如果只需要键序列,则创建 QShortcut。两者都为您处理所有事件过滤,并提供在用户触发键序列时触发的信号,因此比此低级函数易于使用得多。

另请参阅:releaseShortcutsetShortcutEnabledQWidget::grabShortcut

[虚拟保护] void QGraphicsWidget::hideEvent(QHideEvent *event)

此事件处理程序,在 Hide 事件之后发送,例如,当小部件被隐藏时,例如,设定 setVisible(false) 小部件或其祖先之一在之前曾被显示。

您可以重写此事件处理程序以检测您的控件何时被隐藏。在 event 上调用 QEvent::accept() 或 QEvent::ignore() 无效。

另请参阅:showEventQWidget::hideEventItemVisibleChange

[覆盖虚拟保护] void QGraphicsWidget::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)

重写:QGraphicsItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)。

[覆盖虚拟保护] void QGraphicsWidget::hoverMoveEvent(QGraphicsSceneHoverEvent *event)

重写:QGraphicsItem::hoverMoveEvent(QGraphicsSceneHoverEvent *event)。

[虚拟保护] void QGraphicsWidget::initStyleOption(QStyleOption *option) const

根据当前状态填充此小部件的样式选项对象,并将输出存储在 option 中。默认实现使用以下属性填充 option

样式选项属性
state & QStyle::State_Enabled对应于 QGraphicsItem::isEnabled
state & QStyle::State_HasFocus对应于 QGraphicsItem::hasFocus
state & QStyle::State_MouseOver对应于 QGraphicsItem::isUnderMouse()。
方向对应于 QGraphicsWidget::layoutDirection()。
矩形对应于 QGraphicsWidget::rect().toRect()。
调色板对应于 QGraphicsWidget::palette()。
字体度量对应于 QFontMetrics(QGraphicsWidget::font())。

QGraphicsWidget 的子类应调用基实现,然后使用 qstyleoption_cast<>() 或测试 QStyleOption::Type 在存储特定于小部件的选项之前测试 选项 的类型。

例如

void MyGroupBoxWidget::initStyleOption(QStyleOption *option) const
{
    QGraphicsWidget::initStyleOption(option);
    if (QStyleOptionGroupBox *box = qstyleoption_cast<QStyleOptionGroupBox *>(option)) {
        // Add group box specific state.
        box->flat = isFlat();
        ...
    }
}

另请参见 QStyleOption::initFrom()。

void QGraphicsWidget::insertAction(QAction *before, QAction *action)

将动作 action 插入到此小部件的动作列表中,在动作 before 之前。如果 beforenullptrbefore 对于此小部件不是有效的动作,则将其附加到动作上。

一个 QGraphicsWidget 应只有一个每种动作。

另请参见 removeAction(),addAction(),QMenuactions() 和 QWidget::insertActions()。

void QGraphicsWidget::insertActions(QAction *before, const QList<QAction *> &actions)

将动作 actions 插入到此小部件的动作列表中,在动作 before 之前。如果 beforenullptrbefore 对于此小部件不是有效的动作,则将其附加到动作上。

一个 QGraphicsWidget 可以最多只有一个每种动作。

另请参见 removeAction(),QMenuinsertAction() 和 QWidget::insertActions()。

bool QGraphicsWidget::isActiveWindow() const

如果此小部件的窗口在活动窗口中,或者如果此小部件没有窗口但处于活动场景(即当前具有焦点的场景)中,则返回 true

活动窗口是包含当前具有输入焦点的子小部件或本身具有输入焦点的窗口。

另请参见 QGraphicsScene::activeWindow(),QGraphicsScene::setActiveWindow() 和 isActive()。

[重写虚受保护的] QVariant QGraphicsWidget::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)

重实 QGraphicsItem::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)。

QGraphicsWidget 使用此函数的基本实现来捕获和传输与项目状态变化相关的事件。因此,子类调用基本实现非常重要。

change 指定变化的类型,value 是新值。

例如,QGraphicsWidget 使用 ItemVisibleChange 传输 ShowHide 事件,ItemPositionHasChanged 传输 Move 事件,并且 ItemParentChange 同时传输 ParentChange 事件,并用于管理焦点链。

QGraphicsWidget 默认启用 ItemSendsGeometryChanges 标志以跟踪位置变化。

另请参阅QGraphicsItem::itemChange()。

QGraphicsLayout *QGraphicsWidget::layout() const

返回此小部件的布局,或者 nullptr 如果当前没有布局管理此小部件。

注意:布局属性获取器函数。

另请参阅setLayout()。

[virtual protected] void QGraphicsWidget::moveEvent(QGraphicsSceneMoveEvent *event)

此事件处理器为 GraphicsSceneMove 事件,在移动小部件后发送(例如,其本地位置已更改)。

只有当项在本地移动时才发送此事件。调用 setTransform() 或移动任何项的祖先都不会影响项的本地位置。

您可以通过重新实现此事件处理器来检测小部件何时移动。在 event 上调用 QEvent::accept() 或 QEvent::ignore() 没有效果。

另请参阅ItemPositionChangeItemPositionHasChanged

[override virtual] void QGraphicsWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr)

重实现了: QGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)。

[virtual] void QGraphicsWidget::paintWindowFrame(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr)

此虚拟函数由 QGraphicsScene 在本地坐标中调用,以使用 painteroptionwidget 绘制窗口框架。基本实现使用当前样式呈现框架和标题栏。

您可以在 QGraphicsWidget 的子类中重新实现此函数以提供小部件窗口框架的自定义呈现。

另请参阅QGraphicsItem::paint()。

[virtual protected] void QGraphicsWidget::polishEvent()

此事件在项目被构建之后、显示前后或通过场景访问之前由场景传递给项目。您可以使用此事件处理程序对需要项目完全构建的部件进行最后的初始化。

基本实现不执行任何操作。

QRectF QGraphicsWidget::rect() const

返回项目局部矩形作为QRectF。此函数等价于QRectF(QPointF(), size())。

另请参阅 setGeometry() 和 resize()。

void QGraphicsWidget::releaseShortcut(int id)

从 Qt 短路系统移除具有给定 id 的快捷键。部件将不再接收到快捷键的键序列 QEvent::Shortcut 事件(除非它有其他具有相同键序列的快捷键)。

注意:通常不需要使用此函数,因为 Qt 的快捷键系统在父部件销毁时会自动移除快捷键。最好使用 QActionQShortcut 来处理快捷键,因为它们比这个低级函数更容易使用。还要注意,这是一个昂贵的操作。

另请参阅 grabShortcut(),setShortcutEnabled() 和 QWidget::releaseShortcut()。

void QGraphicsWidget::removeAction(QAction *action)

从本部件的动作列表中移除动作 action

另请参阅 insertAction(),actions() 和 QWidget::removeAction()。

void QGraphicsWidget::resize(qreal w, qreal h)

这是一个重载函数。

使用给定的宽度 width (w) 和高度 height (h) 构建缩放。这个便利函数与调用 resize(QSizeF(w, h)) 等价。

注意:属性 size 的设置函数。

另请参阅 setGeometry() 和 setTransform()。

[虚拟保护] void QGraphicsWidget::resizeEvent(QGraphicsSceneResizeEvent *event)

对于 GraphicsSceneResize 事件,此事件处理程序在部件被缩放后传递(即其局部大小已更改)。event 包含旧大小和新大小。

仅当部件在本地缩放时,才会传递此事件;对部件或其祖先或视图调用 setTransform() 不会影响部件的本地大小。

您可以重新实现此事件处理程序以检测您的部件何时被缩放。调用 QEvent::accept() 或 QEvent::ignore() 在 event 上没有效果。

另请参阅 geometry() 以及 setGeometry().

[重写虚保护] bool QGraphicsWidget::sceneEvent(QEvent *event)

重实:QGraphicsItem::sceneEvent(QEvent *event).

QGraphicsWidget 在实现 sceneEvent() 时,简单地将 event 传递给 QGraphicsWidget::event()。您可以在 event() 或其便利函数中处理您小部件的所有事件;通常不需要在 QGraphicsWidget 的子类中重写此函数。

如果 event 被识别和处理,则返回 true;否则返回 false

另请参阅 QGraphicsItem::sceneEvent

void QGraphicsWidget::setAttribute(Qt::WidgetAttribute attribute, bool on = true)

如果 on 为 true,则此函数启用 attribute;否则禁用 attribute

有关支持的属性列表以及它们的用途的完整信息,请参阅 QGraphicsWidget 类文档。

另请参阅 testAttribute() 和 QWidget::setAttribute

void QGraphicsWidget::setContentsMargins(QMarginsF margins)

设置小部件的内边距为 margins

内边距由分配的布局使用,以定义子小部件和布局的位置。边距对于仅约束子小部件在其几何形状部分的小部件特别有用。例如,包含布局的分组框将在标题下方放置子小部件。

更改小部件的内边距将始终触发 update(),并且任何分配的布局将自动激活。之后,小部件将接收一个 ContentsRectChange 事件。

另请参阅 getContentsMargins() 和 setGeometry().

void QGraphicsWidget::setContentsMargins(qreal left, qreal top, qreal right, qreal bottom)

这是一个重载函数。

设置小部件的内边距为 lefttoprightbottom

void QGraphicsWidget::setGeometry(qreal x, qreal y, qreal w, qreal h)

此便利函数相当于调用 setGeometry(QRectF(x, y, w, h))。

注意:此为属性 geometry 的设置器函数。

另请参阅geometry()和resize

void QGraphicsWidget::setLayout(QGraphicsLayout *layout)

将此小部件的布局设置为 layout。在分配新布局之前,将删除现有布局管理器。如果 layoutnullptr,则小部件将不带布局。现有子小部件的几何形状将不受影响。

目前由layout或所有其子布局管理的所有组件都将自动移动到该组件。然后,布局变得无效,并根据此组件的geometry() 和 contentsMargins() 调整子组件的几何形状。没有明确由layout管理的子组件在分配给该组件后将不受布局的影响。

QGraphicsWidget 拥有 layout 的所有权。

注意:属性 layout 的设置函数。

另请参阅:layout(),QGraphicsLinearLayout::addItem(),以及 QGraphicsLayout::invalidate

void QGraphicsWidget::setShortcutAutoRepeat(int id, bool enabled = true)

如果 enabled 为 true,则启用给定 id 的快捷键自动重复;否则,禁用自动重复。

另请参阅:grabShortcut(),releaseShortcut(),以及 QWidget::setShortcutAutoRepeat

void QGraphicsWidget::setShortcutEnabled(int id, bool enabled = true)

如果 enabled 为 true,则启用给定 id 的快捷键;否则,禁用快捷键。

警告:一般情况下,不应使用此函数,因为 Qt 的快捷键系统会在小部件隐藏/显示以及获得或失去焦点时自动启用/禁用快捷键。最好使用 QActionQShortcut 来处理快捷键,因为它们比此底层函数更容易使用。

另请参阅:grabShortcut(),releaseShortcut(),以及 QWidget::setShortcutEnabled

void QGraphicsWidget::setStyle(QStyle *style)

将小部件的样式设置为 style。QGraphicsWidget 不会获取 style 的所有权。

如果没有指定样式,或者 stylenullptr,则小部件将使用 QGraphicsScene::style()(如果已设置该值)。否则,小部件将使用 QApplication::style

如果 style 不是 nullptr,则此函数将设置 Qt::WA_SetStyle 属性;否则,它将清除该属性。

另请参阅:style

[静态] void QGraphicsWidget::setTabOrder(QGraphicsWidget *first, QGraphicsWidget *second)

second 小部件移动到焦点小部件环中,以便按 Tab 键时键盘焦点从 first 小部件移动到 second 小部件。

请注意,由于 second 小部件的制表顺序已更改,因此应该按以下顺序排列此链

setTabOrder(a, b); // a to b
setTabOrder(b, c); // a to b to c
setTabOrder(c, d); // a to b to c to d

不应该 按以下顺序排列

// WRONG
setTabOrder(c, d); // c to d
setTabOrder(a, b); // a to b AND c to d
setTabOrder(b, c); // a to b to c, but not c to d

如果 firstnullptr,则表示在场景获得 Tab 焦点时(即用户按下 Tab 键使得焦点传递到场景),second 应该是第一个接收输入焦点的窗口小部件。如果 secondnullptr,则表示当场景获得 BackTab 焦点时,first 应该是第一个获得焦点的窗口小部件。

默认情况下,Tab 顺序是隐式地使用窗口小部件的创建顺序定义的。

另请参阅focusPolicy窗口小部件中的键盘焦点

void QGraphicsWidget::setWindowFrameMargins(QMarginsF margins)

将窗口小部件的窗口框架边距设置为 margins。默认窗口框架边距由样式提供,并且取决于当前的窗口标志。

如果您想要绘制自己的窗口装饰,可以设置自己的框架边距以覆盖默认边距。

另请参阅unsetWindowFrameMargins(),getWindowFrameMargins() 和 windowFrameRect

void QGraphicsWidget::setWindowFrameMargins(qreal left, qreal top, qreal right, qreal bottom)

这是一个重载函数。

将窗口小部件的窗口框架边距设置为 lefttoprightbottom

[重写虚函数] QPainterPath QGraphicsWidget::shape() const

重写:QGraphicsItem::shape() const

[虚保护] void QGraphicsWidget::showEvent(QShowEvent *event)

此事件处理器,针对 Show 事件,在窗口显示之前交付,例如,当窗口之前被隐藏时,调用 setVisible(true) 为窗口或其祖先之一。

您可以重写此事件处理器以检测窗口何时可见。在 event 上调用 QEvent::accept() 或 QEvent::ignore() 无效。

另请参阅hideEvent(),QWidget::showEvent() 和 ItemVisibleChange

[重写虚保护] QSizeF QGraphicsWidget::sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const

重写:QGraphicsLayoutItem::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const

QStyle *QGraphicsWidget::style() const

返回指向窗口小部件样式的指针。如果此窗口小部件没有明确分配任何样式,则返回场景的样式。如果场景没有分配任何样式,则此函数返回 QApplication::style()。

另请参阅 setStyle()。

bool QGraphicsWidget::testAttribute(Qt::WidgetAttribute attribute) const

如果 attribute 对此小部件已启用,则返回 true;否则返回 false

另请参阅 setAttribute()。

[覆盖虚拟] int QGraphicsWidget::type() const

重实现: QGraphicsItem::type() const

[虚拟保护] void QGraphicsWidget::ungrabKeyboardEvent(QEvent *event)

此事件处理程序,针对 event,可以在子类中重写以接收 QEvent::UngrabKeyboard 事件的通知。

另请参阅 ungrabKeyboard() 和 ungrabMouse()。

[虚拟保护] void QGraphicsWidget::ungrabMouseEvent(QEvent *event)

此事件处理程序,针对 event,可以在子类中重写以接收 QEvent::UngrabMouse 事件的通知。

另请参阅 ungrabMouse() 和 ungrabKeyboard()。

void QGraphicsWidget::unsetWindowFrameMargins()

将窗口边框边距重置为默认值,由样式提供。

另请参阅 setWindowFrameMargins(),getWindowFrameMargins() 和 windowFrameRect()。

[覆盖虚拟保护] void QGraphicsWidget::updateGeometry()

重实现: QGraphicsLayoutItem::updateGeometry

如果此小部件当前由布局管理,则此函数通知布局小部件的尺寸提示已更改,布局可能需要相应地调整大小和重新定位小部件。

如果小部件的 sizeHint() 已更改,请调用此函数。

另请参阅 QGraphicsLayout::invalidate

[虚拟保护] bool QGraphicsWidget::windowFrameEvent(QEvent *event)

此事件处理程序,针对 event,如果此小部件是窗口,则接收窗口框架事件。其基本实现提供了对默认窗口框架交互的支持,如移动、调整大小等。

您可以在 QGraphicsWidget 的子类中重写此处理程序,以提供自定义窗口框架交互支持。

如果 event 被识别和处理,则返回 true;否则返回 false

另请参阅 event

QRectF QGraphicsWidget::windowFrameGeometry() const

返回包括任何窗口框架在内的父坐标中小部件的几何形状。

另请参阅 windowFrameRectgetWindowFrameMarginssetWindowFrameMargins

QRectF QGraphicsWidget::windowFrameRect() const

返回包括任何窗口框架在内的本地矩形。

另请参阅 windowFrameGeometry(),getWindowFrameMargins() 和 setWindowFrameMargins

[虚受保护] Qt::WindowFrameSection QGraphicsWidget::windowFrameSectionAt(const QPointF &pos) const

返回位置 pos 处的窗口框架部分,如果没有窗口框架部分位于该位置,则返回 Qt::NoSection

此函数用于 QGraphicsWidget 的窗口框架交互的基础实现。

如果您想自定义窗口的交互式移动或调整大小方式,您可以重写此函数。例如,如果您只想允许窗口通过右下角进行调整大小,您可以重写此函数以对所有部分返回 Qt::NoSection,除了 Qt::BottomRightSection

另请参阅 windowFrameEventpaintWindowFramewindowFrameGeometry

Qt::WindowType QGraphicsWidget::windowType() const

返回小部件的窗口类型。

另请参阅 windowFlagsisWindow() 和 isPanel

© 2024 Qt 公司有限公司。本文档中的贡献受各自所有者的版权保护。提供的文档受自由软件基金会发布的 GNU 自由文档许可协议版本 1.3 的条款许可。Qt 和相应的商标是芬兰以及/或其他国家和地区的 Qt 公司的商标。所有其他商标均属于其各自所有者。