本文共 6799 字,大约阅读时间需要 22 分钟。
QGraphicsWidget 是 Qt 开发者中非常有用的一个类,它在许多方面扩展了基础的 QWidget 类,同时又增加了丰富的图形功能。以下是关于 QGraphicsWidget 的详细描述,供开发者参考和使用:
QGraphicsWidget 是一个扩展的基础项,它在很多方面与 QWidget 相似,同时也增加了许多图形方面的功能。它提供调色板、字体、样式等功能,并且支持 geometry() 方法、setLayout() 和 layout() 以及 grabShortcut() 和 insertAction() 等功能。与 QGraphicsItem 不同,QGraphicsWidget 不是抽象类,因此可以直接使用。
QGraphicsWidget 是一个扩展的基础项,它在 QGraphicsItem 之上提供额外的功能。与 QWidget 相似,它也增加了许多图形方面的功能,例如调色板、字体、样式等。
QGraphicsWidget 提供以下功能:
QGraphicsWidget 的默认支持的 Qt 小部件属性如下:
尽管 QGraphicsWidget 继承自 QObject 和 QGraphicsItem,但应使用 QGraphicsItem 提供的功能(而不是 QObject)来管理父项和子项之间的关系。通过 QGraphicsItem 的函数控制图形项的堆叠顺序及其所有权。
autoFillBackground:布尔值,表示是否自动填充小部件背景。如果启用,此属性将导致 Qt 在调用 paint() 方法之前填充小部件的背景。QGraphicsWidget 总是用 QPalette::Window 填充,除非设置了 WA_OpaquePaintEvent 属性(属性)。默认此属性为 false。
focusPolicy:Qt::FocusPolicy,表示接受键盘焦点的策略。如果小部件处理键盘事件,则必须为小部件启用键盘焦点,例如,QLineEdit 构造函数调用 setFocusPolicy(Qt::StrongFocus)。如果您启用焦点策略(即,不是 Qt::NoFocus),QGraphicsWidget 将自动启用 ItemIsFocusable 标志(图形项标志)。在小部件上设置 Qt::NoFocus 将清除 ItemIsFocusable 标志。
font:QFont,表示小部件的字体。此属性由显式定义的字体属性和从窗口小部件的父级隐式继承的属性组成。因此,与使用 setFont() 设置的字体相比,font() 可以返回不同的字体。此方案允许您在字体中定义单个条目,而不会影响字体的继承条目。
geometry:QRectF,表示小部件的几何形状。调用此函数会修改图形项的位置和大小。调用此函数的一个副作用是小部件将接收一个移动事件和一个调整大小事件。此外,如果小部件分配了布局,则布局将激活。
layout:QGraphicsLayout*,表示小部件的布局。QGraphicsWidget 拥有布局的所有权。
maximumSize、minimumSize、preferredSize:分别表示小部件的最大、最小和首选尺寸。
palette:QPalette,表示小部件的调色板。调色板为颜色组提供颜色和画笔,定义小部件及其子项的一般外观。QPalette 由显式定义的颜色组和从窗口小部件的父级隐式继承的组组成。因此,palette() 可以返回与 setPalette() 设置不同的调色板。
size:QSizeF,表示小部件的大小。此属性仅影响小部件的宽度和高度。小部件的位置和左上角不受影响。调整小部件的大小会触发 GraphicsSceneResize() 事件。
sizePolicy:QSizePolicy,表示大小策略。
windowFlags:Qt::WindowFlags,表示窗口标志。窗口标志是一个窗口类型(如 Qt::Dialog)和几个提供窗口行为提示的标志的组合。默认情况下,此属性不包含窗口标志。窗户是面板,如果设置了 Qt::Window 标志,则 ItemIsPanel(图形项标志) 标志将自动设置。如果清除 Qt::Window 标志,则 ItemIsPanel 标志也会被清除。注意,ItemIsPanel 标志可以独立于 Qt::Window 设置。
windowTitle:QString,表示窗口标题。此属性仅用于窗口。
*void addAction(QAction action) / *void addActions(QList<QAction >) actions:添加动作到 QAction 列表。QGraphicsWidgets 有一个 QAction 列表。
void adjustSize():将小部件的大小调整为其有效的首选大小(effectiveSizeHint(Qt::PreferredSize)(QGraphicsLayoutItem))。当图形项第一次显示时,这个函数被隐式调用。
bool close():关闭小部件。如果小部件成功关闭,则返回 true,否则返回 false。首先向小部件发送一个 QCloseEvent,该小部件可能接受也可能不接受该事件。如果事件被忽略,则不做任何操作。如果事件被接受,它将关闭小部件。如果小部件设置了 Qt::WA_DeleteOnClose 属性,它将被删除。
[虚函数] bool focusNextPrevChild(bool next):按下 Tab 和 Shift+Tab,查找一个新的小部件以将键盘焦点置于其上,如果可以找到新的小部件,则返回 true,否则返回 false。如果 next 为 true,则向前搜索,否则向后搜索。
QGraphicsWidget *focusWidget():如果此小部件、此小部件的子代或后代当前具有输入焦点,则此函数将返回指向该小部件的指针。
[信号] void geometryChanged():只要在 setGeometry() 中更改几何图形,就会发出此信号。
void getWindowFrameMargins(qreal *left, qreal *top, qreal *right, qreal *bottom):获取小部件的窗口边距。
int grabShortcut(const QKeySequence &sequence, Qt::ShortcutContext context = Qt::WindowShortcut):向 Qt 的快捷系统添加一个快捷键(QKeySequence 是封装了快捷键按键信息的类),该系统在给定的环境(参数2)中监视给定的键序列。
void initStyleOption(QStyleOption *option):根据样式设置对象(QStyleOption)设置 QGraphicsWidget 对象的小部件样式。QStyleOption 对象有如下成员:
**void insertAction(QAction before, QAction action) / **void insertActions(QAction before, QList<QAction >) actions:将参数2的动作插入到参数1的动作之前。如果 before == nullptr 或 before 不是当前小部件的动作,则在动作列表后面追加。
bool isActiveWindow():小部件的窗口位于活动窗口中,或者小部件没有窗口但位于活动场景(即当前具有焦点的场景)中,则返回 true。(活动窗口是包含当前具有输入焦点的子窗口小部件或本身具有输入焦点的窗口)
[虚函数] void paintWindowFrame(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr):由场景调用,在本地坐标中为窗口绘制窗口边框。基本实现使用当前样式来呈现边框和标题栏。
void removeAction(QAction *action):移除动作。
void resize(qreal w, qreal h):重设宽高。
void setAttribute(Qt::WidgetAttribute attribute, bool on = true):如果 on 为 true,则此函数启用属性,否则属性被禁用。实用的属性:
void setContentsMargins(qreal left, qreal top, qreal right, qreal bottom):设置左、上、右、下的内容边距。布局使用内容边距来定义子小部件和布局的位置。
void setLayout(QGraphicsLayout *layout):设置布局。在分配新布局之前,将删除任何现有布局管理器。QGraphicsWidget 拥有布局的所有权。
[static] void setTabOrder(QGraphicsWidget *A, QGraphicsWidget *B):设置当按下 tab 键时焦点从 A 移到 B。
void setWindowFrameMargins(QMarginsF margins):设置小部件窗口边距。默认边距由样式提供,取决于当前窗口标志。如果您想绘制自己的窗口样式,可以设置自己的框架边距以覆盖默认边距。
bool testAttribute(Qt::WidgetAttribute attribute):返回小部件是否启用了属性。
void unsetWindowFrameMargins():将边框边距重置为样式提供的默认值。
void changeEvent(QEvent *event):状态更改事件。包括:
void closeEvent(QCloseEvent *event):小部件关闭事件。默认实现接受事件。
bool event(QEvent *event):处理事件。可处理以下事件:
void grabKeyboardEvent(QEvent *event):处理 QEvent::GrabKeyboard(图形项获取键盘抓取)事件。
void grabMouseEvent(QEvent *event):处理 QEvent::GrabMouse(图形项获取鼠标抓取)事件。
void hideEvent(QHideEvent *event):隐藏事件。在事件上调用 QEvent::accept() 或 QEvent::ignore() 无效。
void moveEvent(QGraphicsSceneMoveEvent *event):移动事件。仅当图形项本身移动时才会传递此事件。调用 setTransform() 或移动任何图形项的祖先都不会影响图形项的本地位置。在事件上调用 QEvent::accept() 或 QEvent::ignore() 无效。
void polishEvent():该事件在图形项构建之后的某个时间点由场景传递给图形项,此事件的作用是图形项在显示之前进行最后的初始化操作。
void resizeEvent(QGraphicsSceneResizeEvent *event):调整大小事件。只有在本地调整小部件大小时才会传递此事件。在小部件或其任何祖先或视图上调用 setTransform() 不会影响小部件的本地大小。在事件上调用 QEvent::accept() 或 QEvent::ignore() 无效。
bool sceneEvent(QEvent *event):从 QGraphicsItem::sceneEvent() 重新实现。QGraphicsWidget 的 sceneEvent() 实现只是将事件传递给 QGraphicsWidget::event()。不应该在 QGraphicsWidget 的子类中重新实现这个函数。
void showEvent(QShowEvent *event):显示事件。在显示小部件之前传递此事件。 在事件上调用 QEvent::accept() 或 QEvent::ignore() 无效。
void ungrabKeyboardEvent(QEvent *event):处理失去键盘抓取事件 QEvent::UngrabKeyboard。
void ungrabMouseEvent(QEvent *event):处理失去鼠标抓取事件 QEvent::UngrabMouse。
bool windowFrameEvent(QEvent *event):处理窗口框架的事件。它的基本实现提供了对默认窗口框架交互的支持,例如移动、调整大小等。
转载地址:http://ncxfk.baihongyu.com/