QGraphicsWidget Class
QGraphicsWidget 类是QGraphicsScene 中所有 widget 项目的基类 ... 更多...
头文件: | #include <QGraphicsWidget> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake: | QT += widgets |
继承: | QGraphicsObject 和QGraphicsLayoutItem |
被继承: |
公共类型
enum | anonymous { Type } |
属性
|
|
公共函数
QGraphicsWidget(QGraphicsItem *parent = nullptr, Qt::WindowFlags wFlags = Qt::WindowFlags()) | |
virtual | ~QGraphicsWidget() |
QList<QAction *> | actions() const |
void | addAction(QAction *action) |
void | addActions(const QList<QAction *> &actions) |
void | adjustSize() |
bool | autoFillBackground() const |
Qt::FocusPolicy | focusPolicy() const |
QGraphicsWidget * | focusWidget() const |
QFont | font() const |
void | getWindowFrameMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const |
int | grabShortcut(const QKeySequence &sequence, Qt::ShortcutContext context = Qt::WindowShortcut) |
void | insertAction(QAction *before, QAction *action) |
void | insertActions(QAction *before, const QList<QAction *> &actions) |
bool | isActiveWindow() const |
QGraphicsLayout * | layout() const |
Qt::LayoutDirection | layoutDirection() const |
virtual void | paintWindowFrame(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) |
QPalette | palette() const |
QRectF | rect() const |
void | releaseShortcut(int id) |
void | removeAction(QAction *action) |
void | resize(const QSizeF &size) |
void | resize(qreal w, qreal h) |
void | setAttribute(Qt::WidgetAttribute attribute, bool on = true) |
void | setAutoFillBackground(bool enabled) |
void | setContentsMargins(QMarginsF margins) |
void | setContentsMargins(qreal left, qreal top, qreal right, qreal bottom) |
void | setFocusPolicy(Qt::FocusPolicy policy) |
void | setFont(const QFont &font) |
void | setGeometry(qreal x, qreal y, qreal w, qreal h) |
void | setLayout(QGraphicsLayout *layout) |
void | setLayoutDirection(Qt::LayoutDirection direction) |
void | setPalette(const QPalette &palette) |
void | setShortcutAutoRepeat(int id, bool enabled = true) |
void | setShortcutEnabled(int id, bool enabled = true) |
void | setStyle(QStyle *style) |
void | setWindowFlags(Qt::WindowFlags wFlags) |
void | setWindowFrameMargins(QMarginsF margins) |
void | setWindowFrameMargins(qreal left, qreal top, qreal right, qreal bottom) |
void | setWindowTitle(const QString &title) |
QSizeF | size() const |
QStyle * | style() const |
bool | testAttribute(Qt::WidgetAttribute attribute) const |
void | unsetLayoutDirection() |
void | unsetWindowFrameMargins() |
Qt::WindowFlags | windowFlags() const |
QRectF | windowFrameGeometry() const |
QRectF | windowFrameRect() const |
QString | windowTitle() const |
Qt::WindowType | windowType() const |
重新实现的公共函数
virtual QRectF | boundingRect() const override |
virtual void | getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const override |
virtual void | paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override |
virtual void | setGeometry(const QRectF &rect) override |
virtual QPainterPath | shape() const override |
virtual int | type() const override |
公共插槽
bool | close() |
信号
void | geometryChanged() |
void | layoutChanged() |
静态公共成员
void | setTabOrder(QGraphicsWidget *first, QGraphicsWidget *second) |
受保护函数
virtual void | changeEvent(QEvent *event) |
virtual void | closeEvent(QCloseEvent *event) |
virtual bool | focusNextPrevChild(bool next) |
virtual void | grabKeyboardEvent(QEvent *event) |
virtual void | grabMouseEvent(QEvent *event) |
virtual void | hideEvent(QHideEvent *event) |
virtual void | initStyleOption(QStyleOption *option) const |
virtual void | moveEvent(QGraphicsSceneMoveEvent *event) |
virtual void | polishEvent() |
virtual void | resizeEvent(QGraphicsSceneResizeEvent *event) |
virtual void | showEvent(QShowEvent *event) |
virtual void | ungrabKeyboardEvent(QEvent *event) |
virtual void | ungrabMouseEvent(QEvent *event) |
virtual bool | windowFrameEvent(QEvent *event) |
virtual Qt::WindowFrameSection | windowFrameSectionAt(const QPointF &pos) const |
重新实现的受保护函数
virtual bool | event(QEvent *event) override |
virtual void | focusInEvent(QFocusEvent *event) override |
virtual void | focusOutEvent(QFocusEvent *event) override |
virtual void | hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override |
virtual void | hoverMoveEvent(QGraphicsSceneHoverEvent *event) override |
virtual QVariant | itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) override |
virtual bool | sceneEvent(QEvent *event) override |
virtual QSizeF | sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const override |
virtual void | updateGeometry() override |
详细说明
QGraphicsWidget 是一个扩展的基本项目,提供了比QGraphicsItem 更多的功能。它在许多方面与QWidget 相似:
- 提供一个palette 、一个font 和一个style() 。
- 具有已定义的geometry()
- 支持setLayout() 和layout() 布局。
- 通过grabShortcut() 和insertAction() 支持快捷方式和操作。
与QGraphicsItem 不同,QGraphicsWidget 不是一个抽象类;您可以创建 QGraphicsWidget 的实例,而无需对其进行子类化。这种方法适用于仅用于将子窗口小部件组织到布局中的窗口小部件。
如果您需要高级输入焦点处理(如标签焦点和激活)或布局,QGraphicsWidget 可用作您自己自定义项的基础项。
由于 QGraphicsWidget 与QWidget 相似,并具有类似的 API,因此将QWidget 中的 widget 移植到 QGraphicsWidget(而不是QGraphicsItem )会更容易。
注: 基于QWidget 的 widget 可通过QGraphicsProxyWidget 直接嵌入到QGraphicsScene 中。
QGraphicsWidget 与QWidget 之间的明显区别如下:
QGraphicsWidget | QWidget |
---|---|
使用 qreals(双倍或浮点数,取决于平台)定义坐标和几何图形。 | QWidget QGraphicsWidget 使用整数几何 ( , )。QPoint QRect |
默认情况下,窗口小部件已经可见;无需调用show() 即可显示窗口小部件。 | QWidget 在调用 () 之前,widget 默认是隐藏的。show |
支持一部分 widget 属性。 | 支持所有 widget 属性。 |
顶层项的样式默认为QGraphicsScene::style | 顶层 widget 的样式默认为QApplication::style |
图形视图提供了一个自定义的拖放框架,不同于QWidget.NET。 | 标准拖放框架。 |
部件项不支持模式。 | 完全支持模式。 |
QGraphicsWidget 支持 Qt 的 widget 属性子集,(Qt::WidgetAttribute),如下表所示。表中未列出的任何属性均不支持,或未使用。
部件属性 | 使用方法 |
---|---|
Qt::WA_SetLayoutDirection | 由setLayoutDirection() 设置,由unsetLayoutDirection() 清除。您可以测试该属性,以检查是否已明确为 Widget 分配了layoutDirection 。如果未设置该属性,则会继承layoutDirection()。 |
Qt::WA_RightToLeft | 由setLayoutDirection() 切换。从父/场景继承。如果设置了该属性,窗口小部件的布局将从右到左排列水平排列的窗口小部件。 |
Qt::WA_SetStyle | 通过setStyle() 设置和清除。如果设置了该属性,则 widget 已被明确指定了样式。如果未设置,部件将使用场景或应用程序的样式。 |
Qt::WA_Resized | 由setGeometry() 和resize() 设置。 |
Qt::WA_SetPalette | 由setPalette() 设置。 |
Qt::WA_SetFont | 由setFont() 设置。 |
Qt::WA_WindowPropagation | 启用向窗口部件传播。 |
尽管 QGraphicsWidget 继承自QObject 和QGraphicsItem ,但您应使用QGraphicsItem 而非 QObject 提供的函数来管理父项与子项之间的关系。这些函数可控制项目的堆叠顺序及其所有权。
注: 对于 QGraphicsWidgets,QObject::parent() 应始终返回nullptr
,但这一策略并未严格定义。
另请参阅 QGraphicsProxyWidget,QGraphicsItem, 以及Widgets and Layouts。
属性文档
autoFillBackground : bool
该属性表示窗口小部件的背景是否被自动填充。
如果启用,该属性将使 Qt 在调用paint() 方法之前填充 widget 的背景。所使用的颜色由窗口部件palette 中的QPalette::Window 颜色角色定义。
此外,除非设置了 WA_OpaquePaintEvent 或 WA_NoSystemBackground 属性,否则 Windows 总是用QPalette::Window 填充。
默认情况下,该属性为false
。
访问功能:
bool | autoFillBackground() const |
void | setAutoFillBackground(bool enabled) |
另请参阅 Qt::WA_OpaquePaintEvent 和Qt::WA_NoSystemBackground 。
focusPolicy : Qt::FocusPolicy
该属性表示窗口部件接受键盘焦点的方式
如果窗口部件通过制表接受键盘焦点,则焦点策略为Qt::TabFocus ;如果窗口部件通过单击接受焦点,则焦点策略为Qt::ClickFocus ;如果两者都接受焦点,则焦点策略为Qt::StrongFocus ;如果完全不接受焦点,则焦点策略为Qt::NoFocus (默认值)。
如果要处理键盘事件,必须为窗口部件启用键盘焦点。这通常在部件的构造函数中完成。例如,QLineEdit 构造函数调用 setFocusPolicy(Qt::StrongFocus)。
如果启用了焦点策略(即不是Qt::NoFocus ),QGraphicsWidget 将自动启用 ItemIsFocusable 标志。在部件上设置Qt::NoFocus 将清除 ItemIsFocusable 标志。如果窗口部件当前有键盘焦点,则会自动失去焦点。
访问功能:
Qt::FocusPolicy | focusPolicy() const |
void | setFocusPolicy(Qt::FocusPolicy policy) |
另请参阅 focusInEvent(),focusOutEvent(),keyPressEvent(),keyReleaseEvent() 和enabled 。
font : QFont
此属性保存部件的字体
该属性提供了 widget 的字体。
QFont 由显式定义的字体属性和从 widget 的父节点隐式继承的属性组成。因此,font() 返回的字体可以与 setFont() 设置的字体不同。通过这种方案,您可以定义字体中的单个条目,而不会影响字体的继承条目。
当一个 widget 的字体发生变化时,它会根据其父 widget 解析其条目。如果该 widget 没有父 widget,则会根据场景解析其条目。然后,该部件会向自己发送FontChange 事件,并通知其所有子部件,以便它们也能解析自己的字体。
默认情况下,该属性包含应用程序的默认字体。
访问功能:
QFont | font() const |
void | setFont(const QFont &font) |
另请参阅 QApplication::font(),QGraphicsScene::font, 和QFont::resolve().
geometry : QRectF
此属性用于保存部件的几何形状
将项目的几何图形设置为rect 。调用此函数后,项目的位置和大小将被修改。项目首先被移动,然后被调整大小。
调用此函数的一个副作用是,窗口部件将收到一个移动事件和一个调整大小事件。此外,如果 widget 已分配了布局,则布局将被激活。
访问功能:
virtual void | setGeometry(const QRectF &rect) override |
void | setGeometry(qreal x, qreal y, qreal w, qreal h) |
通知信号:
void | geometryChanged() |
layout : QGraphicsLayout*
该属性用于保存 widget 的布局
在分配新布局之前,任何现有的布局管理器都会被删除。如果layout 是nullptr
,该 widget 将没有布局。现有子部件的几何图形将不受影响。
QGraphicsWidget 将获得 的所有权。layout
当前由layout 或其所有子布局管理的所有部件都会自动重新分配给该项。然后布局会失效,子部件的几何形状会根据此项目的geometry() 和 contentsMargins() 进行调整。在将布局分配给此 widget 后,未被layout 明确管理的子 widget 不受布局影响。
如果当前没有布局管理此 widget,layout() 将返回nullptr
。
访问函数:
通知信号:
void | layoutChanged() |
layoutDirection : Qt::LayoutDirection
此属性用于保存此 widget 的布局方向。
此属性可修改此 widget 及其所有后代的Qt::WA_RightToLeft 属性。它还可以设置此 widget 的Qt::WA_SetLayoutDirection 属性。
widget 的布局方向决定了布局管理器水平排列此 widget 的子 widget 的顺序。默认值取决于应用程序的语言和地域,通常与文字的读写方向一致。使用Qt::LeftToRight 时,布局会从该 widget 的左侧开始向右侧排列子 widget。而使用Qt::RightToLeft 时则相反,布局会从右侧边缘开始向左侧排列 widget。
子部件从父部件继承其布局方向。顶层 widget 项目的布局方向继承自 QGraphicsScene::layoutDirection。如果您通过调用 setLayoutDirection() 改变了一个 widget 的布局方向,该 widget 将向自己发送一个LayoutDirectionChange 事件,然后将新的布局方向传播给它的所有子节点。
访问函数:
Qt::LayoutDirection | layoutDirection() const |
void | setLayoutDirection(Qt::LayoutDirection direction) |
void | unsetLayoutDirection() |
另请参阅 QWidget::layoutDirection 和QApplication::layoutDirection 。
maximumSize : const QSizeF
该属性保留了 widget 的最大尺寸。
另请参阅 setMaximumSize(),maximumSize(),minimumSize, 和preferredSize 。
minimumSize : const QSizeF
该属性保留了 widget 的最小尺寸。
另请参阅 setMinimumSize(),minimumSize(),preferredSize, 和maximumSize 。
palette : QPalette
该属性包含 widget 的调色板
该属性提供 widget 的调色板。调色板为颜色组(如QPalette::Button )和状态(如QPalette::Inactive )提供颜色和笔刷,大致定义了 widget 及其子控件的外观。
QPalette palette()由明确定义的颜色组和从 widget 的父代隐式继承的颜色组组成。因此,palette() 返回的调色板可能与 setPalette() 设置的不同。通过这种方案,您可以在调色板中定义单个条目,而不会影响调色板的继承条目。
当一个部件的调色板发生变化时,它会根据其父部件解析其条目,如果没有父部件,则根据场景解析。然后,它会向自己发送PaletteChange 事件,并通知其所有后代,以便它们也能解析自己的调色板。
默认情况下,该属性包含应用程序的默认调色板。
访问功能:
QPalette | palette() const |
void | setPalette(const QPalette &palette) |
另请参阅 QGuiApplication::palette(),QGraphicsScene::palette, 和QPalette::resolve().
preferredSize : const QSizeF
该属性保留了 widget 的首选尺寸
另请参阅 setPreferredSize(),preferredSize(),minimumSize, 和maximumSize 。
size : QSizeF
此属性保存 widget 的大小
调用 resize() 会将 widget 的大小调整到minimumSize() 和maximumSize() 所界的size 。该属性只影响 widget 的宽度和高度(如右边缘和底边缘),而不会影响 widget 的位置和左上角。
调整 widget 的大小会触发该 widget 立即接收一个GraphicsSceneResize 事件,其中包含 widget 的新旧大小。如果在该事件发生时,该 widget 已分配了布局,则该布局将被激活,并自动更新任何子 widget 的几何图形。
该属性不会影响父窗口部件的任何布局。如果 widget 本身是由父布局管理的,例如,它的父 widget 已分配了布局,则该布局不会被激活。
默认情况下,该属性包含一个宽度和高度均为零的尺寸。
访问功能:
QSizeF | size() const |
void | resize(const QSizeF &size) |
void | resize(qreal w, qreal h) |
通知信号:
void | geometryChanged() |
另请参阅 setGeometry(),QGraphicsSceneResizeEvent, 和QGraphicsLayout 。
sizePolicy : const QSizePolicy
该属性用于保存 widget 的尺寸策略。
另请参阅 sizePolicy()、setSizePolicy() 和QWidget::sizePolicy()。
windowFlags : Qt::WindowFlags
该属性保存窗口部件的窗口标志
窗口标志是窗口类型(如Qt::Dialog )和几个提示窗口行为的标志的组合。窗口行为与平台有关。
默认情况下,该属性不包含窗口标志。
窗口是面板。如果设置了Qt::Window 标志,ItemIsPanel 标志将自动设置。如果清除Qt::Window 标志,ItemIsPanel 标志也将被清除。请注意,ItemIsPanel 标志的设置可以与Qt::Window 无关。
访问功能:
Qt::WindowFlags | windowFlags() const |
void | setWindowFlags(Qt::WindowFlags wFlags) |
windowTitle : QString
该属性用于保存窗口标题(标题)。
该属性仅用于窗口。
默认情况下,如果没有设置标题,该属性将包含一个空字符串。
访问函数
QString | windowTitle() const |
void | setWindowTitle(const QString &title) |
成员函数文档
QGraphicsWidget::QGraphicsWidget(QGraphicsItem *parent = nullptr, Qt::WindowFlags wFlags = Qt::WindowFlags())
构造一个 QGraphicsWidget 实例。可选的parent 参数传递给QGraphicsItem 的构造函数。可选的wFlags 参数指定窗口小部件的窗口标志(例如,窗口小部件是否应是窗口、工具、弹出窗口等)。
[virtual noexcept]
QGraphicsWidget::~QGraphicsWidget()
销毁QGraphicsWidget 实例。
QList<QAction *> QGraphicsWidget::actions() const
返回此 widget 的操作列表(可能为空)。
另请参阅 insertAction()、removeAction()、QWidget::actions()、QAction::associatedWidgets() 和QAction::associatedGraphicsWidgets()。
void QGraphicsWidget::addAction(QAction *action)
将操作action 添加到该 widget 的操作列表中。
所有 QGraphicsWidget 都有一个QAction的列表,但它们可以用许多不同的方式以图形表示。QAction 列表(由actions() 返回)的默认用途是创建上下文QMenu 。
QGraphicsWidget 的每个操作只能有一个,添加已拥有的操作不会导致同一操作在 widget 中出现两次。
另请参阅 removeAction()、insertAction()、actions() 和QWidget::addAction()。
void QGraphicsWidget::addActions(const QList<QAction *> &actions)
将操作actions 添加到此 widget 的操作列表中。
另请参阅 removeAction(),QMenu,addAction() 和QWidget::addActions().
void QGraphicsWidget::adjustSize()
将窗口小部件的尺寸调整为其有效的首选尺寸提示。
该函数在项目首次显示时被隐式调用。
另请参阅 effectiveSizeHint() 和Qt::MinimumSize 。
[override virtual]
QRectF QGraphicsWidget::boundingRect() const
重实现:QGraphicsItem::boundingRect() const.
[virtual protected]
void QGraphicsWidget::changeEvent(QEvent *event)
该事件处理程序可以重新实现,以处理状态变化。
在此事件中发生变化的状态可通过event 进行检索。
更改事件包括QEvent::ActivationChange,QEvent::EnabledChange,QEvent::FontChange,QEvent::StyleChange,QEvent::PaletteChange,QEvent::ParentChange,QEvent::LayoutDirectionChange, 和QEvent::ContentsRectChange 。
[slot]
bool QGraphicsWidget::close()
调用此函数关闭 widget。
如果 widget 已关闭,则返回true
;否则返回false
。此槽将首先向 widget 发送QCloseEvent ,widget 可能接受也可能不接受该事件。如果事件被忽略,则什么也不会发生。如果事件被接受,它将hide() 该 widget。
如果 widget 设置了Qt::WA_DeleteOnClose 属性,则会被删除。
[virtual protected]
void QGraphicsWidget::closeEvent(QCloseEvent *event)
该事件处理程序用于event ,可在子类中重新实现,以接收部件关闭事件。默认实现接受事件。
另请参阅 close() 和QCloseEvent 。
[override virtual protected]
bool QGraphicsWidget::event(QEvent *event)
重实现:QGraphicsObject::event(QEvent *ev)。
处理event 。QGraphicsWidget 处理以下事件:
事件 | 使用方法 |
---|---|
波兰语 | 在 widget 显示一段时间后向其发送。 |
图形场景移动 | 在 Widget 的本地位置发生变化后向其发送。 |
图形场景调整大小 | 在 Widget 的尺寸发生变化后向其发送。 |
显示 | 在 widget 显示之前发送给它。 |
隐藏 | 在部件隐藏后发送给它。 |
调色板更改 | 在调色板更改后发送给 widget。 |
字体更改 | 在字体发生变化后发送给 widget。 |
启用更改 | 窗口部件的启用状态发生变化后,向窗口部件发送的信息。 |
样式更改 | 窗口部件的样式发生变化后向其发送的信息。 |
布局方向更改 | 当窗口部件的布局方向发生变化后,向窗口部件发送该信息。 |
内容矩形更改 | 在 widget 的内容边距/内容矩形发生变化后向其发送。 |
[override virtual protected]
void QGraphicsWidget::focusInEvent(QFocusEvent *event)
重实现:QGraphicsItem::focusInEvent(QFocusEvent *event).
[virtual protected]
bool QGraphicsWidget::focusNextPrevChild(bool next)
根据 Tab 键和 Shift+Tab 键的情况,查找一个新的窗口部件以给予键盘焦点,如果能找到新的窗口部件,则返回true
;否则返回false
。如果next 为真,则向前搜索;如果next 为假,则向后搜索。
有时,您需要重新实现该函数,以便为部件及其子部件提供特殊的焦点处理。例如,网络浏览器可能会重新实现该函数,以向前或向后移动当前活动链接,并仅在到达页面最后或第一个链接时调用基本实现。
子部件会调用父部件上的 focusNextPrevChild(),但只有包含子部件的窗口才会决定将焦点重定向到哪里。通过为对象重新实现该函数,您可以控制所有子窗口部件的焦点遍历。
另请参见 focusPolicy()。
[override virtual protected]
void QGraphicsWidget::focusOutEvent(QFocusEvent *event)
重实现:QGraphicsItem::focusOutEvent(QFocusEvent *event).
QGraphicsWidget *QGraphicsWidget::focusWidget() const
如果此 widget、此 widget 的子 widget 或后代 widget 当前有输入焦点,此函数将返回指向该 widget 的指针。如果没有后代部件具有输入焦点,则返回nullptr
。
另请参阅 QGraphicsItem::focusItem() 和QWidget::focusWidget()。
[signal]
void QGraphicsWidget::geometryChanged()
每当setGeometry() 中的几何体发生变化时,都会发出该信号。
[override virtual]
void QGraphicsWidget::getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const
重实现:QGraphicsLayoutItem::getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const.
获取 widget 内容的边距。边距作为 qreals 的指针存储在left,top,right 和bottom 中。通过nullptr
可以省略每个参数。
另请参阅 setContentsMargins() 。
void QGraphicsWidget::getWindowFrameMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const
获取 widget 的窗口边距。边距以 qreals 的指针形式存储在left,top,right 和bottom 中。通过nullptr
可以省略每个参数。
另请参阅 setWindowFrameMargins() 和windowFrameRect()。
[virtual protected]
void QGraphicsWidget::grabKeyboardEvent(QEvent *event)
该事件处理程序适用于event ,可在子类中重新实现,以接收QEvent::GrabKeyboard 事件的通知。
另请参阅 grabKeyboard() 和grabMouse()。
[virtual protected]
void QGraphicsWidget::grabMouseEvent(QEvent *event)
该事件处理程序适用于event ,可在子类中重新实现,以接收QEvent::GrabMouse 事件的通知。
另请参阅 grabMouse() 和grabKeyboard()。
int QGraphicsWidget::grabShortcut(const QKeySequence &sequence, Qt::ShortcutContext context = Qt::WindowShortcut)
为 Qt 的快捷方式系统添加一个快捷方式,该快捷方式会在给定的context 中观察给定键sequence 。如果context 是Qt::ApplicationShortcut ,则快捷方式适用于整个应用程序。否则,快捷方式要么是该窗口部件的本地快捷方式(Qt::WidgetShortcut ),要么是窗口本身的快捷方式(Qt::WindowShortcut )。对于不属于窗口的部件(即顶层部件及其子部件),Qt::WindowShortcut 快捷键适用于场景。
如果多个部件抓取了同一个按键sequence ,那么当按键sequence 出现时,将以非确定的顺序向所有适用该按键的部件发送QEvent::Shortcut 事件,但 "明确 "标志将设为 true。
警告: 通常情况下,您不需要使用该函数;相反,您可以使用所需的快捷键序列创建QActions(如果您还需要等效的菜单选项和工具栏按钮),或者创建QShortcuts(如果您只需要快捷键序列)。QAction 和QShortcut 都会为您处理所有事件过滤,并在用户触发按键序列时提供触发信号,因此比这个低级函数更容易使用。
另请参见 releaseShortcut()、setShortcutEnabled() 和QWidget::grabShortcut()。
[virtual protected]
void QGraphicsWidget::hideEvent(QHideEvent *event)
该事件处理程序用于Hide 事件,在部件被隐藏后交付,例如,在部件之前显示时,调用了部件或其一个祖先的 setVisible(false)。
您可以重新实现该事件处理程序,以检测部件何时被隐藏。在event 上调用QEvent::accept() 或QEvent::ignore() 没有任何作用。
另请参阅 showEvent(),QWidget::hideEvent() 和ItemVisibleChange 。
[override virtual protected]
void QGraphicsWidget::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
重实现:QGraphicsItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event).
[override virtual protected]
void QGraphicsWidget::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
重实现:QGraphicsItem::hoverMoveEvent(QGraphicsSceneHoverEvent *event).
[virtual protected]
void QGraphicsWidget::initStyleOption(QStyleOption *option) const
根据此 widget 的当前状态为其填充样式选项对象,并将输出存储在option 中。默认实现用以下属性填充option 。
样式选项 属性 | 值 |
---|---|
状态 &QStyle::State_Enabled | 对应于QGraphicsItem::isEnabled(). |
状态 &QStyle::State_HasFocus | 对应于QGraphicsItem::hasFocus(). |
状态 &QStyle::State_MouseOver | 对应于QGraphicsItem::isUnderMouse(). |
方向 | 对应于QGraphicsWidget::layoutDirection(). |
矩形 | 对应于QGraphicsWidget::rect().toRect()。 |
调色板 | 对应于QGraphicsWidget::palette()。 |
字体度量 | 对应于QFontMetrics(QGraphicsWidget::font()) 。 |
QGraphicsWidget 的子类应调用基本实现,然后使用qstyleoption_cast<>()测试option 的类型,或在存储特定于 widget 的选项之前测试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 插入该 widget 的操作列表,位于操作before 之前。如果before 是nullptr
或before 不是该 widget 的有效操作,则会追加该操作。
QGraphicsWidget 的每个操作只能有一个。
另请参阅 removeAction(),addAction(),QMenu,actions() 和QWidget::insertActions() 。
void QGraphicsWidget::insertActions(QAction *before, const QList<QAction *> &actions)
将操作actions 插入此 widget 的操作列表,位于操作before 之前。如果before 是nullptr
或before 不是该 widget 的有效操作,则会追加该操作。
一个QGraphicsWidget 最多只能有一个动作。
另请参阅 removeAction()、QMenu 、insertAction() 和QWidget::insertActions()。
bool QGraphicsWidget::isActiveWindow() const
如果该窗口部件的窗口位于活动窗口中,或该窗口部件没有窗口但位于活动场景中(即当前有焦点的场景),则返回true
。
活动窗口是指包含当前具有输入焦点的子窗口部件或本身具有输入焦点的窗口。
另请参阅 QGraphicsScene::activeWindow()、QGraphicsScene::setActiveWindow() 和isActive()。
[override virtual protected]
QVariant QGraphicsWidget::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)
重实现:QGraphicsItem::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value).
QGraphicsWidget QGraphicsItem::GraphicsItemChange(QGraphicsItem::GraphicsItemChange 变化)使用此函数的基本实现来捕获和传递与项目中的状态变化相关的事件。因此,子类必须调用基本实现。
change value 是新值。
例如,QGraphicsWidget 使用 ItemVisibleChange 发送Show 和Hide 事件,使用 ItemPositionHasChanged 发送Move 事件,使用 ItemParentChange 发送ParentChange 事件并管理焦点链。
QGraphicsWidget 默认启用 ItemSendsGeometryChanges 标志,以跟踪位置变化。
另请参见 QGraphicsItem::itemChange().
QGraphicsLayout *QGraphicsWidget::layout() const
返回此 widget 的布局,如果当前没有布局管理此 widget,则返回nullptr
。
注: 属性布局的获取函数。
另请参阅 setLayout().
[virtual protected]
void QGraphicsWidget::moveEvent(QGraphicsSceneMoveEvent *event)
对于GraphicsSceneMove 事件,该事件处理程序会在部件移动(例如,其本地位置发生变化)后发送。
只有在本地移动项目时,才会发生该事件。调用setTransform() 或移动项目的任何祖先都不会影响项目的本地位置。
您可以重新实施该事件处理程序,以检测部件是否发生了移动。在event 上调用QEvent::accept() 或QEvent::ignore() 不会产生任何影响。
另请参阅 ItemPositionChange 和ItemPositionHasChanged 。
[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 调用此虚函数,以本地坐标为使用painter,option, 和widget 的窗口绘制窗口边框。基本实现使用当前样式来渲染框架和标题栏。
您可以在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 的快捷方式。该 widget 将不再接收该快捷方式按键序列的QEvent::Shortcut 事件(除非它有其他按键序列相同的快捷方式)。
警告: 由于 Qt 的快捷方式系统会在快捷方式的父窗口小部件被销毁时自动删除快捷方式,因此通常不需要使用此函数。最好使用QAction 或QShortcut 来处理快捷方式,因为它们比这个低级函数更容易使用。还要注意的是,这种操作的成本很高。
另请参阅 grabShortcut()、setShortcutEnabled() 和QWidget::releaseShortcut()。
void QGraphicsWidget::removeAction(QAction *action)
从该 widget 的操作列表中删除操作action 。
另请参阅 insertAction()、actions()、insertAction() 和QWidget::removeAction()。
void QGraphicsWidget::resize(qreal w, qreal h)
这是一个重载函数。
使用给定的width
(w) 和height
(h) 构造一个调整大小的程序。此便捷函数等同于调用 resize(QSizeF(w, h))。
注: 属性size 的设置函数。
另请参阅 setGeometry() 和setTransform()。
[virtual protected]
void QGraphicsWidget::resizeEvent(QGraphicsSceneResizeEvent *event)
对于GraphicsSceneResize 事件,该事件处理程序会在调整部件大小(即其本地大小发生变化)后发送。event 包含新旧大小。
只有在本地调整部件大小时才会发送该事件;在部件或其任何祖先或视图上调用setTransform() 不会影响部件的本地大小。
您可以重新实施该事件处理程序,以检测部件的大小是否已调整。在event 上调用QEvent::accept() 或QEvent::ignore() 不会产生任何影响。
另请参阅 geometry() 和setGeometry()。
[override virtual protected]
bool QGraphicsWidget::sceneEvent(QEvent *event)
重实现:QGraphicsItem::sceneEvent(QEvent *event).
QGraphicsWidgetSceneEvent() 的实现只是简单地将event 传递给QGraphicsWidget::event() 。您可以在event() 或任何便捷函数中处理您的 widget 的所有事件;您不应在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)
将 widget 的内容边距设置为margins 。
内容边距用于指定布局,以定义子部件和布局的位置。边距对于将子部件限制在其自身几何形状的一部分的部件特别有用。例如,带有布局的组框会将子部件置于其框架内,但低于标题。
更改部件的内容边距总是会触发update() 并自动激活指定的布局。然后,该 widget 将收到ContentsRectChange 事件。
另请参阅 getContentsMargins() 和setGeometry()。
void QGraphicsWidget::setContentsMargins(qreal left, qreal top, qreal right, qreal bottom)
这是一个重载函数。
将 widget 的内容边距设置为left,top,right 和bottom 。
void QGraphicsWidget::setGeometry(qreal x, qreal y, qreal w, qreal h)
此方便函数等同于调用 setGeometry(QRectF(x,y,w,h)) 。
注: 属性geometry 的设置函数。
void QGraphicsWidget::setLayout(QGraphicsLayout *layout)
将此 widget 的布局设置为layout 。在分配新布局之前,任何现有的布局管理器都会被删除。如果layout 是nullptr
,该 widget 将没有布局。现有子部件的几何图形将不受影响。
当前由layout 或其所有子布局管理的所有部件都会自动重新分配给该项。然后布局会失效,子部件的几何形状会根据此项目的geometry() 和 contentsMargins() 进行调整。在将布局分配给此 widget 后,未被layout 明确管理的子 widget 不受布局影响。
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 的快捷方式系统会在部件隐藏/可见、获得或失去焦点时自动启用/禁用快捷方式。最好使用QAction 或QShortcut 来处理快捷方式,因为它们比这个底层函数更容易使用。
另请参阅 grabShortcut()、releaseShortcut() 和QWidget::setShortcutEnabled()。
void QGraphicsWidget::setStyle(QStyle *style)
将 widget 的样式设置为style 。QGraphicsWidget 不会占用style 的所有权。
如果未指定样式,或者style 是nullptr
,widget 将使用QGraphicsScene::style() (如果已设置)。否则,widget 将使用QApplication::style()。
如果style 不是nullptr
,该函数将设置Qt::WA_SetStyle 属性;否则将清除该属性。
另请参阅 style()。
[static]
void QGraphicsWidget::setTabOrder(QGraphicsWidget *first, QGraphicsWidget *second)
将second widget 移动到焦点 widget 的环上,这样当按下 Tab 键时,键盘焦点就会从first widget 移动到second widget。
请注意,由于second widget 的制表符顺序已更改,因此应按如下顺序排列链条:
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
如果first 是nullptr
,则表示如果场景获得 Tab 焦点(即用户按下 Tab 键,焦点进入场景),second 应是第一个接收输入焦点的部件。如果second 是nullptr
,则表示如果场景获得 BackTab 焦点,first 应是第一个获得焦点的部件。
默认情况下,选项卡顺序是使用部件创建顺序隐式定义的。
另请参阅 focusPolicy 和部件中的键盘焦点。
void QGraphicsWidget::setWindowFrameMargins(QMarginsF margins)
将 widget 的窗口边框边距设置为margins 。默认边框边距由样式提供,取决于当前的窗口标志。
如果您想绘制自己的窗口装饰,可以设置自己的边框边距来覆盖默认边距。
另请参阅 unsetWindowFrameMargins()、getWindowFrameMargins() 和windowFrameRect()。
void QGraphicsWidget::setWindowFrameMargins(qreal left, qreal top, qreal right, qreal bottom)
这是一个重载函数。
将窗口边框边距设置为left,top,right 和bottom 。
[override virtual]
QPainterPath QGraphicsWidget::shape() const
重实现:QGraphicsItem::shape() const.
[virtual protected]
void QGraphicsWidget::showEvent(QShowEvent *event)
对于Show 事件,该事件处理程序会在 widget 显示之前发送,例如,当该 widget 或其某个祖先调用 setVisible(true) 时,该 widget 之前是隐藏的。
您可以重新实现该事件处理程序,以检测部件何时显示。在event 上调用QEvent::accept() 或QEvent::ignore() 没有任何作用。
另请参阅 hideEvent(),QWidget::showEvent() 和ItemVisibleChange 。
[override virtual protected]
QSizeF QGraphicsWidget::sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const
重实现:QGraphicsLayoutItem::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const.
QStyle *QGraphicsWidget::style() const
返回指向 widget 样式的指针。如果该部件没有任何明确指定的样式,则返回场景的样式。反过来,如果场景没有任何指定的样式,该函数将返回QApplication::style()。
另请参阅 setStyle()。
bool QGraphicsWidget::testAttribute(Qt::WidgetAttribute attribute) const
如果此 widget 已启用attribute ,则返回true
;否则,返回false
。
另请参阅 setAttribute() 。
[override virtual]
int QGraphicsWidget::type() const
重实现:QGraphicsItem::type() const.
[virtual protected]
void QGraphicsWidget::ungrabKeyboardEvent(QEvent *event)
该事件处理程序适用于event ,可在子类中重新实现,以接收QEvent::UngrabKeyboard 事件的通知。
另请参阅 ungrabKeyboard() 和ungrabMouse()。
[virtual protected]
void QGraphicsWidget::ungrabMouseEvent(QEvent *event)
该事件处理程序适用于event ,可在子类中重新实现,以接收QEvent::UngrabMouse 事件的通知。
另请参阅 ungrabMouse() 和ungrabKeyboard()。
void QGraphicsWidget::unsetWindowFrameMargins()
将窗口边框边距重置为样式提供的默认值。
另请参阅 setWindowFrameMargins()、getWindowFrameMargins() 和windowFrameRect()。
[override virtual protected]
void QGraphicsWidget::updateGeometry()
重新实现:QGraphicsLayoutItem::updateGeometry().
如果该 widget 当前由布局管理,则该函数会通知布局该 widget 的尺寸提示已更改,布局可能需要相应地调整该 widget 的大小和位置。
如果 widget 的sizeHint() 已更改,请调用此函数。
另请参阅 QGraphicsLayout::invalidate()。
[virtual protected]
bool QGraphicsWidget::windowFrameEvent(QEvent *event)
该事件处理程序适用于event ,如果该 widget 是一个窗口,则接收窗口边框的事件。它的基本实现支持默认的窗口边框交互,如移动、调整大小等。
您可以在QGraphicsWidget 的子类中重新实现该处理程序,以提供自己的自定义窗口边框交互支持。
如果event 已被识别和处理,则返回true
;否则,返回false
。
另请参阅 event() 。
QRectF QGraphicsWidget::windowFrameGeometry() const
以父坐标(包括任何窗口框架)返回 widget 的几何图形。
另请参阅 windowFrameRect()、getWindowFrameMargins() 和setWindowFrameMargins()。
QRectF QGraphicsWidget::windowFrameRect() const
返回 widget 的本地矩形,包括任何窗口边框。
另请参阅 windowFrameGeometry()、getWindowFrameMargins() 和setWindowFrameMargins()。
[virtual protected]
Qt::WindowFrameSection QGraphicsWidget::windowFrameSectionAt(const QPointF &pos) const
返回pos 位置的窗口框架部分,如果该位置没有窗口框架部分,则返回Qt::NoSection 。
该函数在QGraphicsWidget 的基本实现中用于窗口框架交互。
如果您想自定义交互式移动或调整窗口大小的方式,可以重新实现此函数。例如,如果只允许通过右下角调整窗口大小,则可以重新实现此函数,为除Qt::BottomRightSection 以外的所有部分返回Qt::NoSection 。
另请参见 windowFrameEvent()、paintWindowFrame() 和windowFrameGeometry()。
Qt::WindowType QGraphicsWidget::windowType() const
返回窗口部件的窗口类型。
另请参阅 windowFlags()、isWindow() 和isPanel()。
© 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.