QGraphicsItem 类
QGraphicsItem 类是 QGraphicsScene 中所有图形项的基类。更多...
头文件 | #include <QGraphicsItem> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake | QT += widgets |
继承自 | QAbstractGraphicsShapeItem、QGraphicsItemGroup、QGraphicsLineItem、QGraphicsObject 和 QGraphicsPixmapItem |
公共类型
枚举 | CacheMode { NoCache, ItemCoordinateCache, DeviceCoordinateCache } |
枚举 | GraphicsItemChange { ItemEnabledChange, ItemEnabledHasChanged, ItemPositionChange, ItemPositionHasChanged, ItemTransformChange, …, ItemScenePositionHasChanged } |
枚举 | GraphicsItemFlag { ItemIsMovable, ItemIsSelectable, ItemIsFocusable, ItemClipsToShape, ItemClipsChildrenToShape, …, ItemContainsChildrenInShape } |
标志 | GraphicsItemFlags |
枚举 | PanelModality { NonModal, PanelModal, SceneModal } |
枚举 | 匿名 { Type, UserType } |
公共函数
QGraphicsItem(QGraphicsItem *parent = nullptr) | |
virtual | ~QGraphicsItem() |
bool | acceptDrops() const |
bool | acceptHoverEvents() const |
bool | acceptTouchEvents() const |
Qt::MouseButtons | acceptedMouseButtons() const |
virtual void | advance(int phase) |
virtual QRectF | boundingRect() const = 0 |
QRegion | boundingRegion(const QTransform &itemToDeviceTransform) const |
qreal | boundingRegionGranularity() const |
QGraphicsItem::CacheMode | cacheMode() const |
QList<QGraphicsItem *> | childItems() const |
QRectF | childrenBoundingRect() const |
void | clearFocus() |
QPainterPath | clipPath() const |
virtual bool | collidesWithItem(const QGraphicsItem *other, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const |
virtual bool | collidesWithPath(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const |
QList<QGraphicsItem *> | collidingItems(Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const |
QGraphicsItem * | commonAncestorItem(const QGraphicsItem *other) const |
virtual bool | contains(const QPointF &point) const |
QCursor | cursor() const |
QVariant | data(int key) const |
QTransform | deviceTransformviewportTransform) const |
qreal | effectiveOpacity() const |
void | ensureVisible(const QRectF &rect = QRectF(), int xmargin = 50, int ymargin = 50) |
void | ensureVisible(qreal x, qreal y, qreal w, qreal h, int xmargin = 50, int ymargin = 50) |
bool | filtersChildEvents() const |
QGraphicsItem::GraphicsItemFlags | flags() const |
QGraphicsItem * | focusItem() const |
QGraphicsItem * | focusProxy() const |
void | grabKeyboard() |
void | grabMouse() |
QGraphicsEffect * | graphicsEffect() const |
QGraphicsItemGroup * | group() const |
bool | hasCursor() const |
bool | hasFocus() const |
void | hide() |
Qt::InputMethodHints | inputMethodHints() const |
void | installSceneEventFilter(QGraphicsItem *filterItem) |
bool | isActive() const |
bool | isAncestorOf(const QGraphicsItem *child) const |
bool | isBlockedByModalPanel(QGraphicsItem **blockingPanel = nullptr) const |
bool | isClipped() const |
bool | isEnabled() const |
bool | isObscured(const QRectF &rect = QRectF()) const |
bool | isObscured(qreal x, qreal y, qreal w, qreal h) const |
virtual bool | isObscuredBy(const QGraphicsItem *item) const |
bool | isPanel() const |
bool | isSelected() const |
bool | isUnderMouse() const |
bool | isVisible() const |
bool | isVisibleTo(const QGraphicsItem *parent) const |
bool | isWidget() const |
bool | isWindow() const |
QTransform | itemTransform(const QGraphicsItem *other, bool *ok = nullptr) const |
QPointF | mapFromItem(const QGraphicsItem *item, const QPointF &point) const |
QPolygonF | mapFromItem(const QGraphicsItem *item, const QRectF &rect) const |
QPolygonF | mapFromItem(const QGraphicsItem *item, const QPolygonF &polygon) const |
QPainterPath | mapFromItem(const QGraphicsItem *item, const QPainterPath &path) const |
QPointF | mapFromItem(const QGraphicsItem *item, qreal x, qreal y) const |
QPolygonF | mapFromItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const |
QPointF | mapFromParent(const QPointF &point) const |
QPolygonF | mapFromParent(const QRectF &rect) const |
QPolygonF | mapFromParent(const QPolygonF &polygon) const |
QPainterPath | mapFromParent(const QPainterPath &path) const |
QPointF | mapFromParent(qreal x, qreal y) const |
QPolygonF | mapFromParent(qreal x, qreal y, qreal w, qreal h) const |
QPointF | mapFromScene(const QPointF &point) const |
QPolygonF | mapFromScene(const QRectF &rect) const |
QPolygonF | mapFromScene(const QPolygonF &polygon) const |
QPainterPath | mapFromScene(const QPainterPath &path) const |
QPointF | mapFromScene(qreal x, qreal y) const |
QPolygonF | mapFromScene(qreal x, qreal y, qreal w, qreal h) const |
QRectF | mapRectFromItem(const QGraphicsItem *item, const QRectF &rect) const |
QRectF | mapRectFromItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const |
QRectF | mapRectFromParent(const QRectF &rect) const |
QRectF | mapRectFromParent(qreal x, qreal y, qreal w, qreal h) const |
QRectF | mapRectFromScene(const QRectF &rect) const |
QRectF | mapRectFromScene(qreal x, qreal y, qreal w, qreal h) const |
QRectF | mapRectToItem(const QGraphicsItem *item, const QRectF &rect) const |
QRectF | mapRectToItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const |
QRectF | mapRectToParent(const QRectF &rect) const |
QRectF | mapRectToParent(qreal x, qreal y, qreal w, qreal h) const |
QRectF | mapRectToScene(const QRectF &rect) const |
QRectF | mapRectToScene(qreal x, qreal y, qreal w, qreal h) const |
QPointF | mapToItem(const QGraphicsItem *item, const QPointF &point) const |
QPolygonF | mapToItem(const QGraphicsItem *item, const QRectF &rect) const |
QPolygonF | mapToItem(const QGraphicsItem *item, const QPolygonF &polygon) const |
QPainterPath | mapToItem(const QGraphicsItem *item, const QPainterPath &path) const |
QPointF | mapToItem(const QGraphicsItem *item, qreal x, qreal y) const |
QPolygonF | mapToItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const |
QPointF | mapToParent(const QPointF &point) const |
QPolygonF | mapToParent(const QRectF &rect) const |
QPolygonF | mapToParent(const QPolygonF &polygon) const |
QPainterPath | mapToParent(const QPainterPath &path) const |
QPointF | mapToParent(qreal x, qreal y) const |
QPolygonF | mapToParent(qreal x, qreal y, qreal w, qreal h) const |
QPointF | mapToScene(const QPointF &point) const |
QPolygonF | mapToScene(const QRectF &rect) const |
QPolygonF | mapToScene(const QPolygonF &polygon) const |
QPainterPath | mapToScene(const QPainterPath &path) const |
QPointF | mapToScene(qreal x, qreal y) const |
QPolygonF | mapToScene(qreal x, qreal y, qreal w, qreal h) const |
void | moveBy(qreal dx, qreal dy) |
qreal | opacity() const |
virtual QPainterPath | opaqueArea() const |
virtual void | paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) = 0 |
QGraphicsItem * | panel() const |
QGraphicsItem::PanelModality | panelModality() const |
QGraphicsItem * | parentItem() const |
QGraphicsObject * | parentObject() const |
QGraphicsWidget * | parentWidget() const |
QPointF | pos() const |
void | removeSceneEventFilter(QGraphicsItem *filterItem) |
void | resetTransform() |
qreal | rotation() const |
qreal | scale() const |
QGraphicsScene * | scene() const |
QRectF | sceneBoundingRect() const |
QPointF | scenePos() const |
QTransform | sceneTransform() const |
void | scroll(qreal dx, qreal dy, const QRectF &rect = QRectF()) |
void | setAcceptDrops(bool on) |
void | setAcceptHoverEvents(bool enabled) |
void | setAcceptTouchEvents(bool enabled) |
void | setAcceptedMouseButtons(Qt::MouseButtons buttons) |
void | setActive(bool active) |
void | setBoundingRegionGranularity(qreal granularity) |
void | setCacheMode(QGraphicsItem::CacheMode mode, const QSize &logicalCacheSize = QSize()) |
void | setCursor(const QCursor &cursor) |
void | setData(int key, const QVariant &value) |
void | setEnabled(bool enabled) |
void | setFiltersChildEvents(bool enabled) |
void | setFlag(QGraphicsItem::GraphicsItemFlag flag, bool enabled = true) |
void | setFlags(QGraphicsItem::GraphicsItemFlags flags) |
void | setFocus(Qt::FocusReason focusReason = Qt::OtherFocusReason) |
void | setFocusProxy(QGraphicsItem *item) |
void | setGraphicsEffect(QGraphicsEffect *effect) |
void | setGroup(QGraphicsItemGroup *group) |
void | setInputMethodHints(Qt::InputMethodHints hints) |
void | setOpacity(qreal opacity) |
void | setPanelModality(QGraphicsItem::PanelModality panelModality) |
void | setParentItem(QGraphicsItem *newParent) |
void | setPos(const QPointF &pos) |
void | setPos(qreal x, qreal y) |
void | setRotation(qreal angle) |
void | setScale(qreal factor) |
void | setSelected(bool selected) |
void | setToolTip(const QString &toolTip) |
void | setTransform(const QTransform &matrix, bool combine = false) |
void | setTransformOriginPoint(const QPointF &origin) |
void | setTransformOriginPoint(qreal x, qreal y) |
void | setTransformations(const QList<QGraphicsTransform *> &transformations) |
void | setVisible(bool visible) |
void | setX(qreal x) |
void | setY(qreal y) |
void | setZValue(qreal z) |
virtual QPainterPath | shape() const |
void | 显示() |
void | stackBefore(const QGraphicsItem *sibling) |
QGraphicsObject * | 转为图形对象() |
const QGraphicsObject * | toGraphicsObject() const |
QString | toolTip() const |
QGraphicsItem * | topLevelItem() const |
QGraphicsWidget * | topLevelWidget() const |
QTransform | transform() const |
QPointF | transformOriginPoint() const |
QList<QGraphicsTransform *> | transformations() const |
virtual int | type() const |
void | 撤销键盘捕获() |
void | 撤销鼠标捕获() |
void | 取消光标() |
void | update(const QRectF &rect = QRectF()) |
void | update(qreal x, qreal y, qreal width, qreal height) |
QGraphicsWidget * | window() const |
qreal | x() const |
qreal | y() const |
qreal | zValue() const |
受保护的函数
virtual void | contextMenuEvent(QGraphicsSceneContextMenuEvent *event) |
virtual void | dragEnterEvent(QGraphicsSceneDragDropEvent *event) |
virtual void | dragLeaveEvent(QGraphicsSceneDragDropEvent *event) |
virtual void | dragMoveEvent(QGraphicsSceneDragDropEvent *event) |
virtual void | dropEvent(QGraphicsSceneDragDropEvent *event) |
virtual void | focusInEvent(QFocusEvent *event) |
virtual void | focusOutEvent(QFocusEvent *event) |
virtual void | hoverEnterEvent(QGraphicsSceneHoverEvent *event) |
virtual void | hoverLeaveEvent(QGraphicsSceneHoverEvent *event) |
virtual void | hoverMoveEvent(QGraphicsSceneHoverEvent *event) |
virtual void | inputMethodEvent(QInputMethodEvent *event) |
virtual QVariant | inputMethodQuery(Qt::InputMethodQuery query) const |
virtual QVariant | itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) |
virtual void | keyPressEvent(QKeyEvent *event) |
virtual void | keyReleaseEvent(QKeyEvent *event) |
virtual void | mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) |
virtual void | mouseMoveEvent(QGraphicsSceneMouseEvent *event) |
virtual void | mousePressEvent(QGraphicsSceneMouseEvent *event) |
virtual void | mouseReleaseEvent(QGraphicsSceneMouseEvent *event) |
void | 准备几何变化() |
virtual bool | sceneEvent(QEvent *event) |
virtual bool | sceneEventFilter(QGraphicsItem *watched, QEvent *event) |
void | updateMicroFocus() |
virtual void | wheelEvent(QGraphicsSceneWheelEvent *event) |
相关非成员
T | qgraphicsitem_cast(QGraphicsItem *item) |
详细描述
它为编写您自己的自定义项提供了一个轻量级的基类。这包括定义项的几何形状、碰撞检测、其绘画实现以及通过事件处理器与项的交互。QGraphicsItem 是 Graphics View 框架 的一部分
为了方便,Qt 为最常见的形状提供了一系列标准图形项。这些包括
- QGraphicsEllipseItem 提供椭圆形项
- QGraphicsLineItem 提供线形项
- QGraphicsPathItem 提供任意路径项
- QGraphicsPixmapItem 提供图样项
- QGraphicsPolygonItem 提供多边形项
- QGraphicsRectItem 提供矩形项
- QGraphicsSimpleTextItem 提供简单文本标签项
- QGraphicsTextItem 提供高级文本浏览器项
项的所有几何信息都是基于其局部坐标系。项的位置 pos() 是唯一一个不在局部坐标下操作的功能,因为它返回父坐标下的位置。《图形视图坐标系》详细描述了坐标系。
您可以通过调用 setVisible() 来设置项是否可见(即绘制并接受事件)。隐藏一个项也将隐藏其子项。同样,您可以通过调用 setEnabled() 来启用或禁用项。如果您禁用了一个项,所有其子项也将被禁用。默认情况下,项是可见和启用的。要切换项是否选中,首先通过设置 ItemIsSelectable 标志来启用选择,然后调用 setSelected()。通常,通过用户交互结果导致的场景改变来切换选择。
要编写自己的图形项,您首先创建一个 QGraphicsItem 的子类,然后从实现其两个纯虚公共函数开始:boundingRect(),它返回项绘制的区域估计,以及 paint(),它实现实际绘制。例如
class SimpleItem : public QGraphicsItem { public: QRectF boundingRect() const override { qreal penWidth = 1; return QRectF(-10 - penWidth / 2, -10 - penWidth / 2, 20 + penWidth, 20 + penWidth); } void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override { painter->drawRoundedRect(-10, -10, 20, 20, 5, 5); } };
boundingRect() 函数有多个不同用途。QGraphicsScene 基于 boundingRect() 创建项索引,QGraphicsView 同时用它来裁剪不可见的项以及确定绘制重叠项时需要重新组合的区域。《图形视图坐标系》详细描述了坐标系。
QGraphicsScene 预期所有项目的方法 boundingRect() 和 shape() 保持不变,除非被通知。如果您想以任何方式更改项目的几何形状,必须先调用 prepareGeometryChange()() 以允许 QGraphicsScene 更新其账本。
碰撞检测可以通过两种方式实现
- 重新实现 shape() 以返回您项目准确的形状,并依赖于 collidesWithItem() 的默认实现来完成形状与形状的交集。如果形状很复杂,这可能会相当昂贵。
- 重新实现 collidesWithItem() 以提供您自己的自定义项目和形状碰撞算法。
可以通过调用 contains() 函数来决定项目 是否 包含一个点。此函数也可以由项目重新实现。默认的 contains() 行为是基于调用 shape()。
项目可以包含其他项目,也可以被其他项目包含。所有项目都可以有一个父项目和一个子项目列表。除非项目没有父项目,否则其位置位于 父项目 坐标(即父项目的局部坐标)。父项目将他们的位置和转换传播到所有子项目。
转换
QGraphicsItem 支持除了其基本位置,pos() 之外的项目。有几种方式可以更改项目的转换。对于简单的转换,您可以调用便利函数之一,如 setRotation() 或 setScale(),或者您可以传递任何转换矩阵给 setTransform()。对于高级转换控制,您还可以通过调用 setTransformations() 来设置多个组合转换。
项目转换是从父项目到子项目累积的,所以如果父项目和子项目都旋转了 90 度,子项目的总转换将是 180 度。同样地,如果项目的父项目缩放到原大小的 2 倍,其子项目也将是原来的两倍大。项目的转换不会影响其自身的局部几何形状;所有几何函数(例如,contains(),update(),以及所有映射函数)仍在局部坐标中操作。为方便起见,QGraphicsItem 提供了 sceneTransform() 函数,它返回项目的总转换矩阵(包括其位置和所有父项目的位置和转换),以及 scenePos() 函数,它返回其在场景坐标中的位置。要重置项目的矩阵,请调用 resetTransform()。
某些转换操作的结果取决于它们应用的顺序。例如,如果您先缩放再旋转,可能得到与先旋转再缩放不同的结果。但是,在 QGraphicsItem 上设置的转换属性顺序不会影响结果转换;QGraphicsItem 总是按照固定、定义的顺序应用属性。
- 应用項目的基本转换(transform())
- 按照顺序应用項目的转换列表(transformations())
- 相对于转换原点旋转項目(rotation(),transformOriginPoint())
- 相对于转换原点缩放項目(scale(),transformOriginPoint())
绘制
当 paint() 函数被 QGraphicsView 调用以绘制项目内容时。项目没有自己的背景或默认填充;在函数中未显式绘制的项目背后的内容将透过所有区域。您可以调用 update() 来安排重绘,并可选地传递需要重绘的矩形。根据项目是否在视图中可见,项目可能会或可能不会重绘;QGraphicsItem 中没有等效于 QWidget::repaint() 的重绘函数。
视图通过项目进行绘制,从父项开始,然后按照升序堆叠顺序绘制子项。您可以通过调用 setZValue() 来设置项的堆叠顺序,并通过调用 zValue() 来测试它,在项目堆叠顺序中,Z 值较小的项目在 Z 值较大的项目之前绘制。堆叠顺序适用于同辈项;父项始终先于其子项绘制。
排序...
所有项目都在一个定义明确且稳定的顺序中绘制,并且这个顺序还决定了当您单击场景时,哪些项将首先接收鼠标输入。通常,您不需要担心排序,因为项遵循“自然顺序”,遵循场景的逻辑结构。
项的子项堆叠在父项之上,同辈项按插入顺序堆叠(即,在它们被添加到场景中或在同一父项中被添加的相同顺序)。如果您先添加项目 A,然后是 B,则 B 将位于 A 的顶部。如果您随后添加 C,则项的堆叠顺序将是 A、B、C。
此示例显示了从 Drag and Drop Robot 示例的所有机器人肢体堆叠顺序。躯干是根项(所有其他项都是躯干的孩子或后代),所以它首先被绘制。接下来是头的绘制,因为它是躯干孩子列表中的第一个项。然后是左上臂。因为下臂是上臂的孩子,所以接下来是下臂,然后是上臂的下一个同辈,也就是右上臂,依此类推。
对于高级用户,有一种方法可以更改项的排序方式
- 您可以在项上调用 setZValue() 来显式地将项堆叠在其他同辈项的顶部或下方。项的默认 Z 值为 0。具有相同 Z 值的项按插入顺序堆叠。
- 您可以通过调用 stackBefore() 来重新排序孩子列表。这将直接修改插入顺序。
- 您可以将 ItemStacksBehindParent 标志设置为将子项堆叠在其父项之后。
两个同辈项的堆叠顺序也适用于每个项的孩子和后代项。所以如果一个项在另一个项的顶部,那么它的所有孩子也将位于所有其他项的所有孩子之上。
事件...
QGraphicsItem 通过虚函数 sceneEvent() 从 QGraphicsScene 接收事件。此函数将最常见的事件分布到一套便利事件处理器中
- contextMenuEvent() 处理上下文菜单事件
- focusInEvent() 和 focusOutEvent() 处理鼠标焦点进入和退出事件
- hoverEnterEvent(),hoverMoveEvent() 以及hoverLeaveEvent() 分别处理鼠标悬停进入、移动和离开事件
- inputMethodEvent() 处理输入事件,以支持可访问性
- keyPressEvent() 和 keyReleaseEvent() 处理按键和释放事件
- mousePressEvent(),mouseMoveEvent(),mouseReleaseEvent() 以及mouseDoubleClickEvent() 处理鼠标按下、移动、释放、点击和双击事件
您可以通过安装事件过滤器来过滤任何其他项的事件。该功能与 Qt 的常规事件过滤器(见 QObject::installEventFilter())是分开的,后者只适用于 QObject 的子类。通过调用 installSceneEventFilter() 将您的项作为其他项的事件过滤器安装后,过滤的事件将通过虚拟函数 sceneEventFilter() 接收。您可以通过调用 removeSceneEventFilter() 来删除项事件过滤器。
自定义数据
有时将自定义数据注册到项中很有用,无论这是一个自定义项还是一个标准项。您可以在任何项上调用 setData() 来存储数据,使用键值对(键是一个整数,值是一个 QVariant)。要从项中获取自定义数据,请调用 data()。Qt 本身对这个功能没有任何更改;这是为用户的便利提供的。
另请参阅 QGraphicsScene,QGraphicsView 和 Graphics View Framework
成员类型文档
enum QGraphicsItem::CacheMode
此枚举描述了 QGraphicsItem 的缓存模式。缓存用于通过分配和渲染到离屏像素缓冲区来加速渲染,当项需要重绘时可以重用它。对于某些绘图设备,缓存直接存储在图形内存中,这使得渲染非常快。
常量 | 值 | 描述 |
---|---|---|
QGraphicsItem::NoCache | 0 | 默认值;所有项缓存均已禁用。每次项需要重绘时都会调用 QGraphicsItem::paint()。 |
QGraphicsItem::ItemCoordinateCache | 1 | 对项的逻辑(本地)坐标系启用了缓存。 QGraphicsItem 创建一个可配置大小/分辨率的离屏像素缓冲区,您可以将它传递给 QGraphicsItem::setCacheMode()。渲染质量通常取决于缓存的分辨率和项变换。第一次重绘项时,它将渲染自身到缓存中,然后缓存将被用于后续的暴露。当项变换时,缓存也将被重用。要调整缓存的分辨率,您可以再次调用 setCacheMode()。 |
QGraphicsItem::DeviceCoordinateCache | 2 | 在绘图设备级别,使用设备坐标启用缓存。此模式适用于可以移动但未旋转、缩放或扭曲的项。如果项直接或间接变换,缓存将自动再生。与 ItemCoordinateCacheMode 不同,DeviceCoordinateCache 总是渲染最大质量。 |
参阅QGraphicsItem::setCacheMode。
enum QGraphicsItem::GraphicsItemChange
该枚举描述了由 QGraphicsItem::itemChange 通知的状态变化。这些通知将在状态变化时发送,并且在某些情况下可以进行一些调整(请参见每个变化文档以获取详细信息)。
注意:在 itemChange 中调用 QGraphicsItem 自己的函数时要小心,因为某些函数调用可能导致意外的递归。例如,在 ItemPositionChange 通知的 itemChange 中调用 setPos() 是不允许的,因为 setPos() 函数将再次调用 itemChange(ItemPositionChange)。相反,您可以从 itemChange 中返回新的、调整后的位置。
常量 | 值 | 描述 |
---|---|---|
QGraphicsItem::ItemEnabledChange | 3 | 项目的启用状态发生变化。如果项目目前处于启用状态,它将转变为禁用状态,反之亦然。值参数是新启用状态(即 true 或 false)。在 itemChange 通知发送时不调用 setEnabled(),因为此通知已发送。相反,您可以从 itemChange 中返回新状态。 |
QGraphicsItem::ItemEnabledHasChanged | 13 | 项目的启用状态已更改。值参数是新启用状态(即 true 或 false)。在 itemChange 通知发送时不调用 setEnabled(),因为此通知已发送。返回值将被忽略。 |
QGraphicsItem::ItemPositionChange | 0 | 项目的位置发生变化。如果启用了 ItemSendsGeometryChanges 标志,并且项目相对于其父项的本地位置发生变化时,将发送此通知(即,通过调用 setPos() 或 moveBy())。值参数是新位置(例如,一个 QPointF)。您可以使用 pos() 获取原始位置。在 itemChange 通知发送时不要调用 setPos() 或 moveBy();相反,您可以从 itemChange 中返回新的、调整后的位置。在这次通知之后,如果位置已更改,QGraphicsItem 会立即发送 ItemPositionHasChanged 通知。 |
QGraphicsItem::ItemPositionHasChanged | 9 | 项目的位置已更改。如果启用了 ItemSendsGeometryChanges 标志,并且在项目相对于其父项的本地位置已更改后,将发送此通知。值参数是新位置(与 pos() 相同),并且 QGraphicsItem 忽略此通知的返回值(即,只读通知)。 |
QGraphicsItem::ItemTransformChange | 8 | 项目的变换矩阵发生改变。如果启用了ItemSendsGeometryChanges 标志,并且当项目的局部变换矩阵更改时(即调用setTransform()的结果),则发送此通知。value参数是新矩阵(即一个QTransform);要获取旧矩阵,请调用transform()。在发送此通知时不要调用setTransform()或设置itemChange()中的任何变换属性;相反,您可以从itemChange()返回新矩阵。如果不更改变换属性,则不会发送此通知。 |
QGraphicsItem::ItemTransformHasChanged | 10 | 项目的变换矩阵已更改,因为调用了setTransform,或者更改了变换属性之一。如果启用了ItemSendsGeometryChanges 标志,并且项目的局部变换矩阵更改后,将发送此通知。value参数是新矩阵(与transform()相同),并且QGraphicsItem忽略此通知的返回值(即只读通知)。 |
QGraphicsItem::ItemRotationChange | 28 | 项目的旋转属性更改。如果启用了ItemSendsGeometryChanges 标志,并且项目的旋转属性更改(即调用setRotation()的结果),则发送此通知。value参数是新旋转(即一个双精度浮点数值);要获取旧旋转,请调用rotation()。在发送此通知时不要在itemChange()中调用setRotation();相反,您可以从itemChange()返回新旋转。 |
QGraphicsItem::ItemRotationHasChanged | 29 | 项目的旋转属性已更改。如果启用了ItemSendsGeometryChanges 标志,并且项目的旋转属性更改后,将发送此通知。value参数是新旋转(即一个双精度浮点数值),并且QGraphicsItem忽略此通知的返回值(即只读通知)。在发送此通知时不要在itemChange()中调用setRotation()。 |
QGraphicsItem::ItemScaleChange | 30 | 项目的缩放属性已更改。如果启用了ItemSendsGeometryChanges 标志,并且项目的缩放属性更改(即调用setScale()的结果),则发送此通知。value参数是新缩放(即一个双精度浮点数值);要获取旧缩放,请调用scale()。在发送此通知时不要在itemChange()中调用setScale();相反,您可以从itemChange()返回新缩放。 |
QGraphicsItem::ItemScaleHasChanged | 31 | 项目的缩放属性已更改。如果启用了ItemSendsGeometryChanges 标志,并且项目的缩放属性更改后,将发送此通知。value参数是新缩放(即一个双精度浮点数值),并且QGraphicsItem忽略此通知的返回值(即只读通知)。在发送此通知时不要在itemChange()中调用setScale()。 |
QGraphicsItem::ItemTransformOriginPointChange | 32 | 项目的变换原点属性已更改。如果启用了ItemSendsGeometryChanges标志,并且当项目的变换原点属性更改时(即调用setTransformOriginPoint()之后),则会发送此通知。值参数是新原点(即一个QPointF);要获取旧原点,请调用transformOriginPoint()。不要在itemChange()中调用setTransformOriginPoint(),因为此时将会发出通知;相反,您可以从itemChange()返回新的变换原点。 |
QGraphicsItem::ItemTransformOriginPointHasChanged | 33 | 项目的变换原点属性已更改。如果启用了ItemSendsGeometryChanges标志,并且项目的变换原点属性已更改后,则会发送此通知。值参数是新原点(即一个QPointF),QGraphicsItem将忽略此通知的返回值(即只读通知)。不要在itemChange()中调用setTransformOriginPoint(),因为此时将发出通知。 |
QGraphicsItem::ItemSelectedChange | 4 | 项目的选中状态已更改。如果项目当前被选中,则它将变为未选中,反之亦然。值参数是新选中状态(即true或false)。不要在itemChange()中调用setSelected(),因为此时将发出通知;相反,您可以从itemChange()返回新的选中状态。 |
QGraphicsItem::ItemSelectedHasChanged | 14 | 项目的选中状态已更改。值参数是新选中状态(即true或false)。不要在itemChange()中调用setSelected(),因为此时将发出通知。返回值将被忽略。 |
QGraphicsItem::ItemVisibleChange | 2 | 项目的可见状态已更改。如果项目当前可见,则它将变为不可见,反之亦然。值参数是新可见状态(即true或false)。不要在itemChange()中调用setVisible(),因为此时将发出通知;相反,您可以从itemChange()返回新的可见状态。 |
QGraphicsItem::ItemVisibleHasChanged | 12 | 项目的可见状态已更改。值参数是新可见状态(即true或false)。不要在itemChange()中调用setVisible(),因为此时将发出通知。返回值将被忽略。 |
QGraphicsItem::ItemParentChange | 5 | 项目父项已更改。值参数是新父项(即一个QGraphicsItem指针)。不要在itemChange()中调用setParentItem(),因为此时将发出通知;相反,您可以从itemChange()返回新的父项。 |
QGraphicsItem::ItemParentHasChanged | 15 | 项目父项已更改。值参数是新父项(即一个指向QGraphicsItem的指针)。不要在itemChange()中调用setParentItem(),因为此时将发出通知。返回值将被忽略。 |
QGraphicsItem::ItemChildAddedChange | 6 | 向此项目添加一个子项。值参数是新子项(即QGraphicsItem指针)。在此通知发送时,不要将此项目传递给任何项的setParentItem()函数。返回值未使用;您不能在此通知中调整任何内容。注意,在发送此通知时,新子项可能尚未完全构建;在子项上调用纯虚函数可能导致崩溃。 |
QGraphicsItem::ItemChildRemovedChange | 7 | 从此项目中移除一个子项。值参数是即将被移除的子项(即QGraphicsItem指针)。返回值未使用;您不能在此通知中调整任何内容。 |
QGraphicsItem::ItemSceneChange | 11 | 将项目移动到新场景。当项目被添加到其初始场景以及当项目被移除时,也会发送此通知。项目的scene()是新场景,或如果项目尚未添加到场景,则为nullptr 。值参数是新场景(即QGraphicsScene指针),如果项目从场景中移除,则为nullptr 。不要通过将此项目传递给QGraphicsScene::addItem()来覆盖此更改,因为此通知正在发送;相反,您可以从itemChange()中返回新场景。谨慎使用此功能;反对场景更改可能导致不想要的递归。 |
QGraphicsItem::ItemSceneHasChanged | 16 | 项目的场景已更改。项目的scene()是新场景。当项目被添加到其初始场景,以及当项目被移除时,也会发送此通知。值参数是新场景(即指向QGraphicsScene指针)。在此通知发送时不要在itemChange()中调用setScene()。返回值将被忽略。 |
QGraphicsItem::ItemCursorChange | 17 | 项目的光标更改。值参数是新的光标(即QCursor)。在此通知发送时不要在itemChange()中调用setCursor()。相反,您可以从itemChange()中返回新的光标。 |
QGraphicsItem::ItemCursorHasChanged | 18 | 项目的光标已更改。值参数是新的光标(即QCursor)。在此通知发送时不要调用setCursor()。返回值将被忽略。 |
QGraphicsItem::ItemToolTipChange | 19 | 项目的工具提示更改。值参数是新的工具提示(即QToolTip)。在此通知发送时不要在itemChange()中调用setToolTip()。相反,您可以从itemChange()中返回新的工具提示。 |
QGraphicsItem::ItemToolTipHasChanged | 20 | 项目的工具提示已更改。值参数是新的工具提示(即QToolTip)。在此通知发送时不要调用setToolTip()。返回值将被忽略。 |
QGraphicsItem::ItemFlagsChange | 21 | 项目的标志更改。值参数是新的标志(即quint32)。在此通知发送时不要在itemChange()中调用setFlags()。相反,您可以从itemChange()中返回新的标志。 |
QGraphicsItem::ItemFlagsHaveChanged | 22 | 项目的标志已更改。值参数是新的标志(即quint32)。在此通知发送时不要在itemChange()中调用setFlags()。返回值将被忽略。 |
QGraphicsItem::ItemZValueChange | 23 | 项的Z值发生改变。值参数是新的Z值(即,一个双精度数)。在发送此通知时不要调用 setZValue(),因为正在发出此通知。相反,您可以从 itemChange() 返回一个新的Z值。 |
QGraphicsItem::ItemZValueHasChanged | 24 | 项的Z值已改变。值参数是新的Z值(即,一个双精度数)。在发送此通知时不要调用 setZValue()。返回值将被忽略。 |
QGraphicsItem::ItemOpacityChange | 25 | 项的不透明度发生改变。值参数是新的不透明度(即,一个双精度数)。在发送此通知时不要在 itemChange() 中调用 setOpacity()。相反,您可以从 itemChange() 返回一个新的不透明度。 |
QGraphicsItem::ItemOpacityHasChanged | 26 | 项的不透明度已改变。值参数是新的不透明度(即,一个双精度数)。在发送此通知时不要调用 setOpacity()。返回值将被忽略。 |
QGraphicsItem::ItemScenePositionHasChanged | 27 | 项的场景位置发生改变。如果启用了 ItemSendsScenePositionChanges 标志,并且项的场景位置已改变(即,项本身或任何祖先的位置或变换已改变),则会发送此通知。值参数是新场景位置(与 scenePos() 相同),并且 QGraphicsItem 忽略此通知的返回值(即,只读通知)。 |
枚举 QGraphicsItem::GraphicsItemFlag
flags QGraphicsItem::GraphicsItemFlags
此枚举描述可以在项上设置的不同的标志,这些标志可以切换项的不同行为特性。
默认情况下,所有标志都被禁用。
常量 | 值 | 描述 |
---|---|---|
QGraphicsItem::ItemIsMovable | 0x1 | 该项支持使用鼠标进行交互式移动。通过单击该项并拖动,该项将与鼠标光标一起移动。如果该项有子项,则所有子项也会移动。如果该项是选择集的一部分,则所有选定的项也会移动。此功能通过 QGraphicsItem 的鼠标事件处理程序的基实现提供,作为一种方便。 |
QGraphicsItem::ItemIsSelectable | 0x2 | 该项支持选择。启用此功能将启用 setSelected() 以切换项的选中状态。它还将使项在调用 QGraphicsScene::setSelectionArea()、单击项或使用 QGraphicsView 中的橡皮筋选择时自动选中。 |
QGraphicsItem::ItemIsFocusable | 0x4 | 该项支持键盘输入焦点(即,它是输入项)。启用此标志将允许该项接收焦点,这再次允许将按键事件传递给 QGraphicsItem::keyPressEvent() 和 QGraphicsItem::keyReleaseEvent()。 |
QGraphicsItem::ItemClipsToShape | 0x8 | 该项裁剪到其自己的形状。项不能在其形状之外绘制或接收鼠标、平板、拖放或悬停事件。默认情况下已禁用。此行为通过 QGraphicsView::drawItems() 或 QGraphicsScene::drawItems() 强制执行。此标志是在 Qt 4.3 中引入的。 |
QGraphicsItem::ItemClipsChildrenToShape | 0x10 | 项目会将其所有子项的绘画裁剪到自己的形状中。此项目的直接或间接子项都无法超出此项目形状绘制。默认情况下,此标志是禁用的;子项可以在任何地方绘制。这种行为由QGraphicsView::drawItems()或QGraphicsScene::drawItems()执行。此标志在Qt 4.3中引入。 |
注意:此标志与ItemContainsChildrenInShape类似,但还通过裁剪子项来强制执行包含关系。
常量 | 值 | 描述 |
---|---|---|
QGraphicsItem::ItemIgnoresTransformations | 0x20 | 项目忽略继承的变换(即,它的位置仍然锚定到父项,但父项或视图旋转、缩放或剪切变换被忽略)。此标志对于保持文本标签项水平且不缩放非常有用,以便在视图变换时仍可阅读。设置时,项目的外观几何形状和场景几何形状将分别维护。您必须调用deviceTransform()来映射坐标并检测视图中的碰撞。默认情况下,此标志是禁用的。此标志在Qt 4.3中引入。 |
注意:设置此标志后,您仍然可以缩放项目本身,而该缩放变换将影响项目的子项。
常量 | 值 | 描述 |
---|---|---|
QGraphicsItem::ItemIgnoresParentOpacity | 0x40 | 项目忽略其父项的不透明度。项目的有效不透明度与其自身相同;它不与父项的不透明度组合。此标志允许顶层项即使在父项半透明时也能保持其绝对不透明度。此标志在Qt 4.5中引入。 |
QGraphicsItem::ItemDoesntPropagateOpacityToChildren | 0x80 | 项目不会将其不透明度传播给其子项。此标志允许您创建不影响子项不透明度的半透明项。此标志在Qt 4.5中引入。 |
QGraphicsItem::ItemStacksBehindParent | 0x100 | 项目堆叠在其父项之后。默认情况下,子项堆叠在父项之上。但设置此标志,子项将堆叠在其后面。此标志对于创建阴影效果和跟随父项几何形状的装饰对象非常有用,而无需在其上方绘制。此标志在Qt 4.5中引入。 |
QGraphicsItem::ItemUsesExtendedStyleOption | 0x200 | 项目利用exposedRect,位于QStyleOptionGraphicsItem中。默认情况下,exposedRect初始化为项目的boundingRect。您可以启用此标志以使用更细粒度的值来设置样式选项。如果需要更高的值,请使用QStyleOptionGraphicsItem::levelOfDetailFromTransform()。此标志在Qt 4.6中引入。 |
QGraphicsItem::ItemHasNoContents | 0x400 | 项目不绘制任何内容(即,在项上调用paint()没有任何效果)。您应该将此标志设置为不再需要绘制的项目,以确保图形视图避免不必要的绘制准备。此标志在Qt 4.6中引入。 |
QGraphicsItem::ItemSendsGeometryChanges | 0x800 | 项目启用了itemChange()通知,用于ItemPositionChange、ItemPositionHasChanged、ItemTransformChange、ItemTransformHasChanged、ItemRotationChange、ItemRotationHasChanged、ItemScaleChange、ItemScaleHasChanged、ItemTransformOriginPointChange和ItemTransformOriginPointHasChanged。出于性能考虑,默认情况下禁用这些通知。您必须启用此标志才能接收位置和变换更改的通知。此标志在Qt 4.6中引入。 |
QGraphicsItem::ItemAcceptsInputMethod | 0x1000 | 该项目支持用于亚洲语言的常见输入法。此标志自 Qt 4.6 开始引入。 |
QGraphicsItem::ItemNegativeZStacksBehindParent | 0x2000 | 如果项目的 z 值为负,则该项目会自动堆叠在其父项之后。此标志使用户能够通过 setZValue() 来切换 ItemStacksBehindParent。此标志自 Qt 4.6 开始引入。 |
QGraphicsItem::ItemIsPanel | 0x4000 | 该项目是一个面板。面板提供激活和包含焦点处理。一次只能有一个面板处于激活状态(参看 QGraphicsItem::isActive())。如果没有面板处于激活状态,QGraphicsScene 将激活所有非面板项。窗口项(即 QGraphicsItem::isWindow() 返回 true)是面板。此标志自 Qt 4.6 开始引入。 |
QGraphicsItem::ItemSendsScenePositionChanges | 0x10000 | 该项目启用 itemChange() 通知 ItemScenePositionHasChanged。出于性能考虑,这些通知默认是禁用的。您必须启用此标志才能接收场景位置改变的通知。此标志自 Qt 4.6 开始引入。 |
QGraphicsItem::ItemContainsChildrenInShape | 0x80000 | 此标志指示项目的所有直接或间接子项仅在项目的形状内绘制。与 ItemClipsChildrenToShape 不同,这种限制没有强制执行。当您手动确保绘制被绑定到项目的形状,并希望避免强制执行裁剪的成本时,请设置 ItemContainsChildrenInShape。设置此标志可启用更有效的绘制和碰撞检测。该标志默认禁用。 |
注意:如果同时设置了此标志和 ItemClipsChildrenToShape,则会强制执行裁剪。这相当于仅设置 ItemClipsChildrenToShape。
此标志自 Qt 5.4 开始引入。
GraphicsItemFlags 类型是 QFlags<GraphicsItemFlag> 的 typedef。它存储 GraphicsItemFlag 值的或组合。
enum QGraphicsItem::PanelModality
该枚举指定了模式面板的行为。模式面板是一种会阻止其他面板输入的面板。注意,模式面板的子项不会被阻塞。
值包括
常量 | 值 | 描述 |
---|---|---|
QGraphicsItem::NonModal | 0 | 该面板不是模式,不会阻止其他面板的输入。这是面板的默认值。 |
QGraphicsItem::PanelModal | 1 | 该面板对单个项层次结构是模式的,并阻止其父窗口、所有祖父面板以及其父和祖父面板的兄弟面板的输入。 |
QGraphicsItem::SceneModal | 2 | 该窗口对整个场景是模式的,并阻止所有面板的输入。 |
另请参见:QGraphicsItem::setPanelModality()、QGraphicsItem::panelModality() 和 QGraphicsItem::ItemIsPanel。
enum QGraphicsItem::匿名
由 Qt 中标准图形项类中的虚拟 type() 函数返回的值。Qt 中所有此类标准图形项类都与一个独特的类型值相关联,例如 QGraphicsPathItem::type() 返回的值是 2。
常量 | 值 | 描述 |
---|---|---|
QGraphicsItem::Type | 1 | class QGraphicsPathItem : public QAbstractGraphicsShapeItem { public: enum { Type = 2 }; int type() const override { return Type; } ... }; |
QGraphicsItem::UserType | 65536 | type() 虚拟函数对于自定义 QGraphicsItem 子类返回的最低值。class CustomItem : public QGraphicsItem { public: enum { Type = UserType + 1 }; int type() const override { // Enable the use of qgraphicsitem_cast with this item. return Type; } ... }; |
成员函数文档
[显式]
QGraphicsItem::QGraphicsItem(QGraphicsItem *parent = nullptr)
使用给定的父项 parent 构造 QGraphicsItem。它不会修改由 QObject::parent() 返回的父对象。
如果父对象是nullptr
,您可以调用QGraphicsScene::addItem()将项目添加到场景中。此时,该项目将成为顶级项目。
另请参阅QGraphicsScene::addItem()以及setParentItem。
[虚函数 noexcept]
QGraphicsItem::~QGraphicsItem()
销毁QGraphicsItem及其所有子项。如果此项目当前与场景关联,则在删除之前将其从场景中删除。
注意:在销毁项目之前将其从QGraphicsScene中删除更有效率。
bool QGraphicsItem::acceptDrops() const
如果此项目可以接受拖放事件,则返回true
;否则,返回false
。默认情况下,项目不接受拖放事件;项目对拖放事件是透明的。
另请参阅setAcceptDrops。
bool QGraphicsItem::acceptHoverEvents() const
如果项目接受悬停事件(QGraphicsSceneHoverEvent),则返回true
;否则,返回false
。默认情况下,项目不接受悬停事件。
另请参阅setAcceptHoverEvents以及setAcceptedMouseButtons。
bool QGraphicsItem::acceptTouchEvents() const
如果项目接受触摸事件,则返回true
;否则,返回false
。默认情况下,项目不接受触摸事件。
另请参阅setAcceptTouchEvents。
Qt::MouseButtons QGraphicsItem::acceptedMouseButtons() const
返回此项目接受的鼠标按钮,用于 mouse 事件。默认情况下,接受所有鼠标按钮。
如果项目接受鼠标按钮,则当传递鼠标点击事件时,它将成为鼠标抓取项目。然而,如果项目不接受该按钮,QGraphicsScene将向其下方接受该按钮的第一个项目转发鼠标事件。
另请参阅setAcceptedMouseButtons和mousePressEvent。
[虚函数]
void QGraphicsItem::advance(int phase)
此虚拟函数在QGraphicsScene::advance()槽中为所有项目调用两次。在第一阶段,所有项目使用phase == 0被调用,表示场景上的项目即将前进;然后所有项目使用phase == 1被调用。如果需要简单场景控制的动画,重新实现此函数以更新您的项目。
默认实现不执行任何操作。
此函数旨在用于动画。另一种选择是双重继承自QObject和QGraphicsItem并使用动画框架。
另请参阅QGraphicsScene::advance和QTimeLine。
[纯虚函数]
QRectF QGraphicsItem::boundingRect() const
此纯虚函数定义了项目的外部边界为一个矩形;所有绘图必须限制在项目边界矩形内部。《QGraphicsView》使用它来确定项目是否需要重绘。
尽管项目的形状可以是任意的,边界矩形总是矩形的,并且它不受项目变换的影响。
如果您想要更改项目的边界矩形,必须首先调用prepareGeometryChange()。这会通知场景即将发生的更改,以便它可以更新项目几何索引;否则,场景将不知道项目的新几何形状,其结果是未定义的(通常,视图内会留下渲染伪影)。
重新实现此函数,以便《QGraphicsView》确定哪些部件,如果有的话,需要重绘。
注意:对于绘制轮廓/笔画的形状,在边界矩形中包含一半的笔宽是很重要的。不过不需要对抗锯齿进行补偿。
示例
QRectF CircleItem::boundingRect() const { qreal penWidth = 1; return QRectF(-radius - penWidth / 2, -radius - penWidth / 2, diameter + penWidth, diameter + penWidth); }
另请参阅boundingRegion(),shape(),contains(),图形视图坐标系,以及prepareGeometryChange。
QRegion QGraphicsItem::boundingRegion(const QTransform &itemToDeviceTransform) const
返回此项目的边界区域。返回的区域坐标空间取决于itemToDeviceTransform。如果您将身份QTransform作为参数传递,此函数将返回局部坐标区域。
边界区域描述了项目视觉内容的粗略轮廓。虽然计算成本较高,但它比boundingRect()更精确,并且有助于在项目更新时避免不必要的重绘。这对于细项目(例如,线条或简单多边形)尤其有效。您可以通过调用setBoundingRegionGranularity()来调整边界区域的粒度。默认粒度为0;在此粒度下,项目的边界区域与边界矩形相同。
itemToDeviceTransform是项目坐标到设备坐标的变换。如果您想将此函数返回的QRegion作为场景坐标,可以将sceneTransform()作为参数传递。
另请参阅boundingRegionGranularity。
qreal QGraphicsItem::boundingRegionGranularity() const
返回项目的边界区域粒度;介于0到1之间的值。默认值为0(即最低粒度,边界区域与边界矩形相同)。
另请参阅setBoundingRegionGranularity。
QGraphicsItem::CacheMode QGraphicsItem::cacheMode() const
返回此项目的缓存模式。默认模式是NoCache(即禁用缓存,所有绘图都是立即的)。
另请参阅 setCacheMode().
QList<QGraphicsItem *> QGraphicsItem::childItems() const
返回此项目的子项列表。
项目按照堆叠顺序排序。这既考虑了项目的插入顺序,也考虑了它们在Z轴上的值。
另请参阅 setParentItem(),zValue() 以及 排序。
QRectF QGraphicsItem::childrenBoundingRect() const
返回该项目后代子项(即其子项,它们的子项等)在本地坐标中的边界矩形。矩形将包含所有后代在映射到本地坐标系之后的区域。如果项目没有子项,此函数返回一个空的 QRectF。
这不包括此项目自己的边界矩形;它仅返回其后代的累积边界矩形。如果您需要包括此项目的边界矩形,可以使用 QRectF::operator|() 将 boundingRect() 添加到 childrenBoundingRect() 中。
此函数在复杂度上是线性的;它通过迭代所有后代来确定返回边界矩形的大小。
另请参阅 boundingRect() 和 sceneBoundingRect()。
void QGraphicsItem::clearFocus()
从项中获取键盘输入焦点。
如果有焦点,则向此项目发送 focus out event 事件,以便通知它它即将失去焦点。
只有设置了 ItemIsFocusable 标志的项或设置了适当焦点策略的小部件才能接受键盘焦点。
另请参阅 setFocus(),hasFocus() 以及 QGraphicsWidget::focusPolicy。
QPainterPath QGraphicsItem::clipPath() const
返回此项的剪裁路径,或者如果此项未被剪裁,则返回一个空的 QPainterPath。剪裁路径限制了项的外观和交互(即限制项可以绘制在内的区域和接收事件的范围)。
您可以通过设置 ItemClipsToShape 或 ItemClipsChildrenToShape 标志来启用剪裁。项的剪裁路径是通过交集所有剪裁祖先的形状来计算的。如果项设置了 ItemClipsToShape,最终的剪裁与项自身的形状相交。
注意:剪裁会给所有相关项引入性能代价;通常情况下,如果可能的话(例如,如果您的项总是绘制在 boundingRect() 或 shape() 的边界内,剪裁是不必要的)。
另请参阅 isClipped(),shape() 以及 setFlags。
[virtual]
bool QGraphicsItem::collidesWithItem(const QGraphicsItem *other, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const
如果此项与 other 发生冲突,则返回 true
;否则返回 false
。
将模式应用于其他,然后将产生的形状或边界矩形与之项的形状进行比较。默认的模式值是Qt::IntersectsItemShape;其他与此项的形状相交,或包含或被包含在内(请参阅Qt::ItemSelectionMode获取详细信息)。
默认实现基于形状交叠,并在两个项上调用形状()。由于任意形状-形状交叠的复杂性会随着形状复杂性的增长按数量级增加,因此此操作可能会消耗较多时间。您可以选择在QGraphicsItem的子类中重新实现此函数,以提供自定义算法。这使您能够利用自身项形状中的自然约束来提高碰撞检测的性能。例如,可以通过比较位置和半径来非常有效地确定两个未变换的完美圆形项的碰撞。
请注意,在重新实现此函数并调用形状()或边界矩形()时,在发生任何交集之前,必须将返回的坐标映射到此项的坐标系。
[虚拟]
bool QGraphicsItem::collidesWithPath(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const
如果此项与路径发生碰撞则返回true
。
碰撞通过模式确定。默认的模式值是Qt::IntersectsItemShape;如果路径与此项的形状相交、包含或被包含,则与该项发生碰撞。
请注意,此函数检查项的形状或边界矩形(根据模式)是否在路径内,而不是检查路径是否在项的形状或边界矩形内。
另请参阅collidesWithItem()、contains()和形状。
QList<QGraphicsItem *> QGraphicsItem::collidingItems(Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const
返回所有与此项发生碰撞的项的列表。
碰撞检测的方法是通过将模式应用于与此项进行比较的项来确定的,即检查每个项的形状或边界矩形与此项的形状。默认的模式值是Qt::IntersectsItemShape。
另请参阅collidesWithItem。
QGraphicsItem *QGraphicsItem::commonAncestorItem(const QGraphicsItem *other) const
返回此项和其他最近的共同祖先项,如果没有共同祖先或其他为nullptr
,则返回nullptr
。
另请参阅 isAncestorOf()。
[虚]
bool QGraphicsItem::contains(const QPointF &point) const
如果此项包含局部坐标中的 point,则返回 true
;否则返回 false
。通常从 QGraphicsView 中调用它来确定光标下的项,因此此函数的实现应尽可能轻量。
默认情况下,此函数调用 shape(),但您可以在子类中重写它以提供(可能更高效)的实现。
另请参阅 shape(),boundingRect() 和 collidesWithPath()。
[虚受保护]
void QGraphicsItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
可以在子类中重写此事件处理程序以处理上下文菜单事件。参数 event 包含要处理的事件的详细信息。
如果您忽略事件(例如,通过调用 QEvent::ignore()),则 event 将传播到此项下的任何项。如果没有项接受事件,则场景将忽略它并传播到视图。
响应上下文菜单事件打开 QMenu 是常见的。例如
void CustomItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) { QMenu menu; QAction *removeAction = menu.addAction("Remove"); QAction *markAction = menu.addAction("Mark"); QAction *selectedAction = menu.exec(event->screenPos()); // ... }
默认实现忽略事件。
另请参阅 sceneEvent()。
QCursor QGraphicsItem::cursor() const
返回当前项的指针形状。鼠标光标在指针上时将采用此形状。请参阅预定义光标对象的列表,了解范围。
编辑器项可能想使用 I-beam 光标
item->setCursor(Qt::IBeamCursor);
如果没有设置指针,则使用项下方的指针。
另请参阅 setCursor(),hasCursor(),unsetCursor(),QWidget::cursor 和 QGuiApplication::overrideCursor()。
QVariant QGraphicsItem::data(int key) const
以 QVariant 形式返回此项的键 key 的自定义数据。
自定义项数据对于在任一项中存储任意属性很有用。例如
static const int ObjectName = 0; QGraphicsItem *item = scene.itemAt(100, 50); if (item->data(ObjectName).toString().isEmpty()) { if (qgraphicsitem_cast<ButtonItem *>(item)) item->setData(ObjectName, "Button"); }
Qt 为存储数据而不会使用此功能;它仅为了用户的方便提供。
另请参阅 setData()。
QTransform QGraphicsItem::deviceTransform(const QTransform &viewportTransform) const
返回此项目的设备变换矩阵,使用viewportTransform将场景坐标映射到设备坐标。这个矩阵可以用来将坐标和几何形状从项目的本地坐标系映射到视口(或任何设备的)坐标系。要从视口映射坐标,您必须首先反转返回的矩阵。
示例
QGraphicsRectItem rect; rect.setPos(100, 100); rect.deviceTransform(view->viewportTransform()).map(QPointF(0, 0)); // returns the item's (0, 0) point in view's viewport coordinates rect.deviceTransform(view->viewportTransform()).inverted().map(QPointF(100, 100)); // returns view's viewport's (100, 100) coordinate in item coordinates
此函数与将此项目的场景变换与视图的视口变换组合相同,但它还理解ItemIgnoresTransformations标志。设备变换可以用于对不可变换的项目进行精确的坐标映射(和碰撞检测)。
另请参阅 transform(),setTransform(),scenePos(),图形视图坐标系,以及itemTransform()。
[虚拟受保护]
void QGraphicsItem::dragEnterEvent(QGraphicsSceneDragDropEvent *event)
此事件处理器,用于事件event,可以重新实现以接收此项目的拖拽进入事件。当光标进入项目的区域时将生成拖拽进入事件。
通过接受事件(即,通过调用QEvent::accept()),项目将接受放下事件,并且还会接收到拖拽移动和离开事件。否则,事件将被忽略并传播到下层项目。如果事件被接受,项目将在控制权返回到事件循环之前接收到拖拽移动事件。
拖拽进入事件的常见实现取决于event中相关联的MIME数据。示例
CustomItem::CustomItem() { setAcceptDrops(true); ... } void CustomItem::dragEnterEvent(QGraphicsSceneDragDropEvent *event) { event->setAccepted(event->mimeData()->hasFormat("text/plain")); }
项目默认不接收拖拽和放下事件;要启用此功能,请调用setAcceptDrops(true)
。
默认实现不执行任何操作。
另请参阅 dropEvent(),dragMoveEvent()和dragLeaveEvent()。
[虚拟受保护]
void QGraphicsItem::dragLeaveEvent(QGraphicsSceneDragDropEvent *event)
此事件处理器,用于事件event,可以重新实现以接收此项目的拖拽离开事件。当光标离开项目的区域时将生成拖拽离开事件。您通常不需要重写此函数,但它在重置项目状态(例如,突出显示)时可能很有用。
在event上调用QEvent::ignore()或QEvent::accept()没有效果。
项目默认不接收拖拽和放下事件;要启用此功能,请调用setAcceptDrops(true)
。
默认实现不执行任何操作。
另请参阅 dragEnterEvent(),dropEvent()和dragMoveEvent()。
[虚拟受保护]
void QGraphicsItem::dragMoveEvent(QGraphicsSceneDragDropEvent *event)
此事件处理器,用于事件event,可以重新实现以接收此项目的拖拽移动事件。当光标在项目区域内移动时将生成拖拽移动事件。您通常不需要重写此函数;它用于指示只有项目的部分可以接受放置。
在 事件 上调用 QEvent::ignore() 或 QEvent::accept() 将切换项目是否接受来自事件的放置。默认情况下,事件 被接受,表示项目允许在指定位置进行放置。
项目默认不接收拖拽和放下事件;要启用此功能,请调用setAcceptDrops(true)
。
默认实现不执行任何操作。
另请参阅dropEvent(),dragEnterEvent() 和 dragLeaveEvent()。
[虚保护]
void QGraphicsItem::dropEvent(QGraphicsSceneDragDropEvent *event)
此事件处理程序,用于事件 事件,可以被重写以接收此项目的放置事件。仅在最后一个拖动移动事件被接受时,项目才能接收放置事件。
在event上调用QEvent::ignore()或QEvent::accept()没有效果。
项目默认不接收拖拽和放下事件;要启用此功能,请调用setAcceptDrops(true)
。
默认实现不执行任何操作。
另请参阅dragEnterEvent(),dragMoveEvent() 和 dragLeaveEvent()。
qreal QGraphicsItem::effectiveOpacity() const
返回此项目的 有效 透明度,该值介于 0.0(透明)和 1.0(不透明)之间。此值是其本地透明度以及父项和祖先的透明度的组合。有效透明度决定了项目的渲染方式。
另请参阅opacity(),setOpacity(),paint(),ItemIgnoresParentOpacity 和 ItemDoesntPropagateOpacityToChildren。
void QGraphicsItem::ensureVisible(const QRectF &rect = QRectF(), int xmargin = 50, int ymargin = 50)
如果此项目是 QGraphicsView 观察的场景的一部分,此便利函数将尝试滚动视图以确保 rect 在视图视口内可见。如果 rect 是一个空矩形(默认值),QGraphicsItem 将默认为项目的边界矩形。xmargin 和 ymargin 是视图应使用的像素数作为边距。
如果指定的矩形无法到达,内容将滚动到最近的合法位置。
如果此项目未由 QGraphicsView 查看,则此函数不执行任何操作。
另请参阅QGraphicsView::ensureVisible()。
void QGraphicsItem::ensureVisible(qreal , qreal , qreal w, qreal h, int = 50, int ymargin = 50)
此便利函数相当于调用 ensureVisible(QRectF(x, y, w, h), xmargin, ymargin)。
bool QGraphicsItem::filtersChildEvents() const
如果此项目过滤子事件(即,所有旨在其主要子项的事件都发送到此项目),则返回 true
;否则返回 false。
默认值为 false;子事件不被过滤。
另请参阅 setFiltersChildEvents()。
QGraphicsItem::GraphicsItemFlags QGraphicsItem::flags() const
返回此元素的标志。标志描述了哪些可配置功能被启用和禁用。例如,如果标志包括 ItemIsFocusable,则元素可以接受输入焦点。
默认情况下,没有启用任何标志。
[虚拟受保护]
void QGraphicsItem::focusInEvent(QFocusEvent *event)
此事件处理程序,对应于 event 事件,可以重写以接收此元素的焦点事件。默认实现调用 ensureVisible()。
另请参阅 focusOutEvent(),sceneEvent() 和 setFocus()。
QGraphicsItem *QGraphicsItem::focusItem() const
如果此元素、此元素的子元素或后代元素当前具有输入焦点,该函数将返回该元素的指针。如果没有后代具有输入焦点,返回 nullptr
。
另请参阅 hasFocus(),setFocus() 和 QWidget::focusWidget()。
[虚拟受保护]
void QGraphicsItem::focusOutEvent(QFocusEvent *event)
此事件处理程序,对应于 event 事件,可以重写以接收此元素的焦点离开事件。默认实现不执行任何操作。
另请参阅 focusInEvent(),sceneEvent() 和 setFocus()。
QGraphicsItem *QGraphicsItem::focusProxy() const
返回此元素的焦点代理,如果没有焦点代理则为 nullptr
。
另请参阅 setFocusProxy(),setFocus() 和 hasFocus()。
void QGraphicsItem::grabKeyboard()
捕获键盘输入。
在以下事件发生之前,该元素将接收场景中的所有键盘输入
- 该元素变为不可见
- 该元素从场景中移除
- 该元素被删除
- 该元素调用 ungrabKeyboard()
- 另一个元素调用 grabKeyboard();当其他元素调用 ungrabKeyboard() 时,该元素将重新获得键盘捕获。
当元素获得键盘捕获时,它会接收到一个 QEvent::GrabKeyboard 事件。当它失去键盘捕获时,它会接收到一个 QEvent::UngrabKeyboard 事件。可以通过其他方式而不是通过获得输入焦点来使用这些事件来检测您的元素何时获得或失去键盘捕获。
在 Qt 中,几乎从未需要显式地捕获键盘,因为 Qt 合理地捕获和释放键盘。特别是,当您的元素获得输入焦点时,Qt 会捕获键盘,当您的元素失去输入焦点或隐藏时,Qt 会释放键盘。
请注意,只有可见的元素才能捕获键盘输入。对不可见元素调用 grabKeyboard() 无效。
键盘事件不受影响。
另请参阅 ungrabKeyboard(),grabMouse() 和 setFocus()。
void QGraphicsItem::grabMouse()
获取鼠标输入。
该项将在以下任一事件发生之前接收场景中的所有鼠标事件:
- 该元素变为不可见
- 该元素从场景中移除
- 该元素被删除
- 该项调用 ungrabMouse()
- 另一个项调用 grabMouse(); 该项将在其他项调用 ungrabMouse() 时重新获取鼠标。
当一个项获得鼠标时,它将接收一个 QEvent::GrabMouse 事件。当它失去鼠标时,它将接收一个 QEvent::UngrabMouse 事件。这些事件可用于检测项通过其他方式(不仅是接收鼠标按钮事件)获取或失去鼠标。
在Qt中通常不需要显式地获取鼠标,因为Qt可以合理地获取和释放它。特别是,Qt在按鼠标按钮时获取鼠标,并且在释放最后一个鼠标按钮之前保持获取鼠标。另外,Qt::Popup 小部件在显示时会隐式地调用 grabMouse(),在隐藏时调用 ungrabMouse()。
请注意,只有可见的项才能获取鼠标输入。对不可见项调用 grabMouse() 无效。
键盘事件不受影响。
另请参阅 QGraphicsScene::mouseGrabberItem,ungrabMouse 和 grabKeyboard。
QGraphicsEffect *QGraphicsItem::graphicsEffect() const
如果该项有效应,则返回指向该项的指针;否则返回 nullptr
。
另请参阅 setGraphicsEffect。
QGraphicsItemGroup *QGraphicsItem::group() const
返回指向该项的项组的指针,或者如果没有该项组,则返回 nullptr
。
另请参阅 setGroup,QGraphicsItemGroup 和 QGraphicsScene::createItemGroup。
bool QGraphicsItem::hasCursor() const
如果该项设置了光标,则返回 true
;否则返回 false。
默认情况下,项没有设置任何光标。 cursor() 返回一个标准的指向箭头光标。
另请参阅 unsetCursor。
bool QGraphicsItem::hasFocus() const
如果该项是活动的,并且它或其 焦点代理 具有键盘输入焦点,则返回 true
;否则返回 false
。
另请参阅 focusItem,setFocus,QGraphicsScene::setFocusItem 和 isActive。
void QGraphicsItem::hide()
隐藏该项(项默认是可见的)。
此便捷函数等价于调用 setVisible(false)
。
另请参阅 show 和 setVisible。
[虚拟受保护]
void QGraphicsItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
此事件处理程序是针对事件 event 的,可以重写以接收此物品的悬停进入事件。默认实现调用 update(),否则不进行任何操作。
在event上调用QEvent::ignore()或QEvent::accept()没有效果。
另请参阅hoverMoveEvent(),hoverLeaveEvent(),sceneEvent() 和 setAcceptHoverEvents()。
[虚拟受保护]
void QGraphicsItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
此事件处理程序是针对事件 event 的,可以重写以接收此物品的悬停离开事件。默认实现调用 update(),否则不进行任何操作。
在event上调用QEvent::ignore()或QEvent::accept()没有效果。
另请参阅hoverEnterEvent(),hoverMoveEvent(),sceneEvent() 和 setAcceptHoverEvents()。
[虚拟受保护]
void QGraphicsItem::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
此事件处理程序是针对事件 event 的,可以重写以接收此物品的悬停移动事件。默认实现不进行任何操作。
在event上调用QEvent::ignore()或QEvent::accept()没有效果。
另请参阅hoverEnterEvent(),hoverLeaveEvent(),sceneEvent() 和 setAcceptHoverEvents()。
[虚拟受保护]
void QGraphicsItem::inputMethodEvent(QInputMethodEvent *event)
此事件处理程序是针对事件 event 的,可以重写以接收此物品的输入方法事件。默认实现忽略该事件。
另请参阅inputMethodQuery() 和 sceneEvent()。
Qt::InputMethodHints QGraphicsItem::inputMethodHints() const
返回此物品当前的输入方法标志。
输入方法标志仅在输入项目中相关。提示由输入方法使用,以指示其如何操作。例如,如果设置了 Qt::ImhNumbersOnly 标志,输入方法可能会更改其视觉组件以反映只能输入数字。
效果可能在不同的输入方法实现之间有所不同。
另请参阅setInputMethodHints() 和 inputMethodQuery()。
[虚拟受保护]
QVariant QGraphicsItem::inputMethodQuery(Qt::InputMethodQuery query) const
此方法仅对输入项目相关。它由输入方法使用,以查询物品的属性集,以便支持复杂的输入方法操作,如支持周围文本和再转换。 query 指定查询哪个属性。
另请参阅inputMethodEvent() 和 QInputMethodEvent。
void QGraphicsItem::installSceneEventFilter(QGraphicsItem *filterItem)
为filterItem安装事件过滤器,使得所有针对此物品的事件首先通过filterItem的sceneEventFilter()函数。
为了过滤另一个物品的事件,将此物品作为其他物品的事件过滤器安装。示例
QGraphicsScene scene; QGraphicsEllipseItem *ellipse = scene.addEllipse(QRectF(-10, -10, 20, 20)); QGraphicsLineItem *line = scene.addLine(QLineF(-10, -10, 20, 20)); line->installSceneEventFilter(ellipse); // line's events are filtered by ellipse's sceneEventFilter() function. ellipse->installSceneEventFilter(line); // ellipse's events are filtered by line's sceneEventFilter() function.
一个物品只能过滤同一场景中其他物品的事件。此外,一个物品不能过滤自己的事件;相反,您可以直接重写sceneEvent()。
场景事件过滤器必须安装并使用时,物品需属于一个场景。
另请参阅removeSceneEventFilter()、sceneEventFilter()和sceneEvent()。
bool QGraphicsItem::isActive() const
如果此物品处于活动状态,则返回true
;否则返回false
。
只有当场景处于活动状态时,一个物品才能被激活。一个物品如果它本身是活动面板的一部分,或者是一个活动面板的后代,那么它是活动的。非活动面板中的物品不是活动的。
当场景没有活动面板时,非面板物品会跟随场景激活。
只有活跃的物品可以获得输入焦点。
另请参阅QGraphicsScene::isActive()、QGraphicsScene::activePanel()、panel()和isPanel()。
bool QGraphicsItem::isAncestorOf(const QGraphicsItem *child) const
如果此物品是child的后代(即此物品是child的父项,或child的父项的后代之一),则返回true
。
另请参阅parentItem().
bool QGraphicsItem::isBlockedByModalPanel(QGraphicsItem **blockingPanel = nullptr) const
如果此物品被模态面板封锁,则返回true
,否则返回false
。如果blockingPanel非零,blockingPanel将被设置为此封锁此物品的模态面板。如果此物品没有被封锁,该函数不会设置blockingPanel。
对于不处于场景中的物品,此函数始终返回false
。
另请参阅panelModality()、setPanelModality()和PanelModality。
bool QGraphicsItem::isClipped() const
如果此物品被剪辑,则返回true
。一个物品如果它或其祖先之一设置了制定的标志ItemClipsToShape或者ItemClipsChildrenToShape,则表示它被剪辑。
剪辑会影响物品的显示(即绘画),以及鼠标和悬停事件的传递。
另请参阅clipPath()、shape()和setFlags()。
bool QGraphicsItem::isEnabled() const
如果该项处于启用状态,将返回 true
;否则返回 false。
另请参阅setEnabled。
bool QGraphicsItem::isObscured(const QRectF &rect = QRectF()) const
这是一个重载函数。
如果 rect 被上方任何具有更高 Z 值的碰撞项的不透明形状完全遮挡,将返回 true
。
另请参阅opaqueArea。
bool QGraphicsItem::isObscured(qreal x, qreal y, qreal w, qreal h) const
这是一个重载函数。
此便利函数等价于调用 isObscured(QRectF(x, y, w, h))。
[虚函数]
bool QGraphicsItem::isObscuredBy(const QGraphicsItem *item) const
如果此项的边界矩形被item的不透明形状完全遮挡,则返回 true
。
基本实现将item的 opaqueArea() 映射到此项的坐标系,然后检查此项的boundingRect() 是否完全包含在映射后的形状中。
您可以通过重写此函数来提供一个自定义算法,以确定此项是否被item遮挡。
另请参阅opaqueArea() 和 isObscured。
bool QGraphicsItem::isPanel() const
如果该项是面板,则返回 true
;否则返回 false
。
另请参阅QGraphicsItem::panel() 和 ItemIsPanel。
bool QGraphicsItem::isSelected() const
如果此项被选中,将返回 true
;否则返回 false。
属于组的项会继承组的选中状态。
项默认不会被选中。
另请参阅setSelected() 和 QGraphicsScene::setSelectionArea。
bool QGraphicsItem::isUnderMouse() const
如果此项当前在任何视图中位于鼠标光标下方,则返回 true
;否则返回 false。
另请参阅QGraphicsScene::views() 和 QCursor::pos。
bool QGraphicsItem::isVisible() const
如果该项可见,则返回 true
;否则返回 false。
注意,该项的一般可见性与它是否实际上被QGraphicsView可视化无关。
另请参阅setVisible。
bool QGraphicsItem::isVisibleTo(const QGraphicsItem *parent) const
如果该项目在 parent 中可见,则返回 true
;否则返回 false
。如果 parent 是 nullptr
,则此函数将返回项是否对场景可见。
即使 isVisible() 返回 true,项目可能对其祖先不可见。即使在 isVisible() 返回 false 的情况下,它也可能对其祖先可见。如果有任何祖先被隐藏,该项目本身将隐式地被隐藏,此时此函数将返回 false。
另请参阅 isVisible() 和 setVisible()。
bool QGraphicsItem::isWidget() const
如果此项目是一个小部件(即 QGraphicsWidget),则返回 true
;否则返回 false
。
bool QGraphicsItem::isWindow() const
如果项是 QGraphicsWidget 窗口,则返回 true
;否则返回 false。
另请参阅 QGraphicsWidget::windowFlags。
[虚拟受保护]
QVariant QGraphicsItem::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)
此虚拟函数由 QGraphicsItem 调用以通知自定义项项状态的部分已更改。通过重写此函数,您可以响应更改,在某些情况下(取决于 change),可以进行调整。
change 是正在更改的项目参数。 value 是新值;值的类型取决于 change。
示例
QVariant Component::itemChange(GraphicsItemChange change, const QVariant &value) { if (change == ItemPositionChange && scene()) { // value is the new position. QPointF newPos = value.toPointF(); QRectF rect = scene()->sceneRect(); if (!rect.contains(newPos)) { // Keep the item inside the scene rect. newPos.setX(qMin(rect.right(), qMax(newPos.x(), rect.left()))); newPos.setY(qMin(rect.bottom(), qMax(newPos.y(), rect.top()))); return newPos; } } return QGraphicsItem::itemChange(change, value); }
默认实现不执行任何操作,并返回 value。
注意:在重写此函数的情况下,某些 QGraphicsItem 函数不能被调用;有关详细信息,请参阅 GraphicsItemChange 文档。
另请参阅 GraphicsItemChange。
QTransform QGraphicsItem::itemTransform(const QGraphicsItem *other, bool *ok = nullptr) const
返回一个 QTransform,该变换将坐标从该项目映射到 other。如果 ok 不为 null,并且没有此类变换,则由 ok 指向的布尔值将被设置为 false;否则设置为 true。
此变换提供了对 mapToItem() 或 mapFromItem() 函数的替代方案,通过返回适当的变换,您可以自己映射形状和坐标。它还帮助您在重复映射相同两个项目的情况下编写更高效的代码。
注意:在罕见情况下,不存在映射两个项目的变换。
另请参阅 mapToItem()、mapFromItem() 和 deviceTransform。
[虚拟受保护]
void QGraphicsItem::keyPressEvent(QKeyEvent *event)
此事件处理进程,用于事件 event,可以重写以接收此项目的按键事件。默认实现忽略事件。如果重新实现此处理程序,则事件默认会被接受。
请注意,只有设置了 ItemIsFocusable 标志并且拥有键盘输入焦点的项目才会接收按键事件。
另请参阅keyReleaseEvent(按键释放事件),setFocus(设置焦点),QGraphicsScene::setFocusItem(设置焦点项)和 sceneEvent(场景事件)。
[虚拟受保护]
void QGraphicsItem::keyReleaseEvent(QKeyEvent *event)
此事件处理进程,用于事件 event,可以重写以接收此项目的按键释放事件。默认实现忽略事件。如果重新实现此处理程序,则事件默认会被接受。
请注意,只有设置了 ItemIsFocusable 标志并且拥有键盘输入焦点的项目才会接收按键事件。
另请参阅keyPressEvent(按键事件),setFocus(设置焦点),QGraphicsScene::setFocusItem(设置焦点项)和 sceneEvent(场景事件)。
QPointF QGraphicsItem::mapFromItem(const QGraphicsItem *item, const QPointF &point) const
将点 point(在 item 的坐标系中)映射到此项目的坐标系,并返回映射的坐标。
如果 item 是 nullptr
,则此函数返回的值与 mapFromScene 返回的值相同。
另请参阅itemTransform(项目变换),mapFromParent(从父项映射),mapFromScene(从场景映射),transform(变换)和 图形视图坐标系。
QPolygonF QGraphicsItem::mapFromItem(const QGraphicsItem *item, const QRectF &rect) const
将矩形 rect(在 item 的坐标系中)映射到此项目的坐标系中,并将映射的矩形作为多边形返回。
如果 item 是 nullptr
,此函数返回的值与 mapFromScene 返回的值相同。
另请参阅itemTransform(项目变换),mapToItem(映射到项),mapFromParent(从父项映射),transform(变换)和 图形视图坐标系。
QPolygonF QGraphicsItem::mapFromItem(const QGraphicsItem *item, const QPolygonF &polygon) const
将多边形 polygon(在 item 的坐标系中)映射到此项目的坐标系中,并返回映射的多边形。
如果 item 是 nullptr
,则此函数返回的值与 mapFromScene 返回的值相同。
另请参阅itemTransform(项目变换),mapToItem(映射到项),mapFromParent(从父项映射),transform(变换)和 图形视图坐标系。
QPainterPath QGraphicsItem::mapFromItem(const QGraphicsItem *item, const QPainterPath &path) const
将路径path,该路径处于item的坐标系统中,映射到当前项的坐标系统中,并返回映射后的路径。
如果 item 是 nullptr
,则此函数返回的值与 mapFromScene 返回的值相同。
另请参阅itemTransform,mapFromParent,mapFromScene,mapToItem和图形视图坐标系统。
QPointF QGraphicsItem::mapFromItem(const QGraphicsItem *item, qreal x, qreal y) const
这是一个重载函数。
此便利函数等价于调用mapFromItem(item, QPointF(x, y) )。
QPolygonF QGraphicsItem::mapFromItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const
此便利函数等价于调用mapFromItem(item, QRectF(x, y, w, h))。
QPointF QGraphicsItem::mapFromParent(const QPointF &point) const
将点point(处于此处项的父项的坐标系统),映射到此项的坐标系统中,并返回映射的坐标。
另请参阅mapFromItem,mapFromScene,transform,mapToParent和图形视图坐标系统。
QPolygonF QGraphicsItem::mapFromParent(const QRectF &rect) const
将矩形rect(处于此处项的父项的坐标系统),映射到此项的坐标系统中,并返回作为多边形的映射矩形。
另请参阅mapToParent,mapFromItem,transform和图形视图坐标系统。
QPolygonF QGraphicsItem::mapFromParent(const QPolygonF &polygon) const
将多边形polygon(处于此处项的父项的坐标系统),映射到此项的坐标系统中,并返回映射的多边形。
另请参阅 mapToParent(),mapToItem(),transform() 和 图形视图坐标系。
QPainterPath QGraphicsItem::mapFromParent(const QPainterPath &path) const
将路径 path 从父项的坐标系映射到当前项的坐标系,并返回映射后的路径。
另请参阅 mapFromScene(),mapFromItem(),mapToParent() 和 图形视图坐标系。
QPointF QGraphicsItem::mapFromParent(qreal x, qreal ) const
这是一个重载函数。
此便捷函数等同于调用 mapFromParent(QPointF(x, y))。
QPolygonF QGraphicsItem::mapFromParent(qreal x, qreal y, qreal w, qreal h) const
此便捷函数等同于调用 mapFromItem(QRectF(x, y, w, h))。
QPointF QGraphicsItem::mapFromScene(const QPointF &point) const
将点 point 从场景坐标系映射到当前项的坐标系,并返回映射后的坐标。
另请参阅 mapFromItem(),mapFromParent(),transform(),mapToScene() 和 图形视图坐标系。
QPolygonF QGraphicsItem::mapFromScene(const QRectF &rect) const
将矩形 rect 从场景坐标系映射到当前项的坐标系,并返回映射后的矩形作为多边形。
另请参阅 mapToScene(),mapFromItem(),transform() 和 图形视图坐标系。
QPolygonF QGraphicsItem::mapFromScene(const QPolygonF &polygon) const
将多边形 polygon 从场景坐标系映射到当前项的坐标系,并返回映射后的多边形。
另请参阅 mapToScene(),mapFromParent(),transform() 和 图形视图坐标系。
QPainterPath QGraphicsItem::mapFromScene(const QPainterPath &path) const
将路径 path(位于此元素的场景坐标系中)映射到此元素的坐标系中,并返回映射后的路径。
另请参阅mapFromParent(映射到父对象)、mapFromItem(映射到元素)、mapToScene(映射到场景)和图形视图坐标系。
QPointF QGraphicsItem::mapFromScene(qreal x, qreal y) const
这是一个重载函数。
此便利函数等价于调用 mapFromScene(QPointF(x, y))。
QPolygonF QGraphicsItem::mapFromScene(qreal x, qreal y, qreal w, qreal h) const
此便利函数等价于调用 mapFromScene(QRectF(x, y, w, h))。
QRectF QGraphicsItem::mapRectFromItem(const QGraphicsItem *item, const QRectF &rect) const
将矩形 rect(位于 item 的坐标系中)映射到此元素的坐标系中,并返回映射后的矩形作为一个新矩形(即结果多边形的边界矩形)。
如果 item 是 nullptr
,则此函数返回与 mapRectFromScene 相同的结果。
另请参阅itemTransform(项目变换)、mapToParent(映射到父对象)、mapToScene(映射到场景)、mapFromItem(映射到元素)和图形视图坐标系。
QRectF QGraphicsItem::mapRectFromItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const
此便利函数等价于调用 mapRectFromItem(item, QRectF(x, y, w, h))。
QRectF QGraphicsItem::mapRectFromParent(const QRectF &rect) const
将矩形 rect(位于此元素的父对象的坐标系中)映射到此元素的坐标系中,并返回映射后的矩形作为一个新矩形(即结果多边形的边界矩形)。
另请参阅itemTransform(项目变换)、mapToParent(映射到父对象)、mapToScene(映射到场景)、mapFromItem(映射到元素)和图形视图坐标系。
QRectF QGraphicsItem::mapRectFromParent(qreal x, qreal y, qreal w, qreal h) const
此便捷函数等价于调用 mapRectFromParent(QRectF(x, y, w, h))).
QRectF QGraphicsItem::mapRectFromScene(const QRectF &rect) const
将场景坐标系中的矩形 rect 映射到这个项的坐标系,并以新矩形的形式返回映射后的矩形(即结果多边形的边界矩形)。
另请参阅itemTransform(项目变换)、mapToParent(映射到父对象)、mapToScene(映射到场景)、mapFromItem(映射到元素)和图形视图坐标系。
QRectF QGraphicsItem::mapRectFromScene(qreal x, qreal y, qreal w, qreal h) const
此便捷函数等价于调用 mapRectFromScene(QRectF(x, y, w, h))).
QRectF QGraphicsItem::mapRectToItem(const QGraphicsItem *item, const QRectF &rect) const
将此项坐标系中的矩形 rect 映射到 item 的坐标系,并以新矩形的形式返回映射后的矩形(即结果多边形的边界矩形)。
如果 item 是 nullptr
,则此函数返回的与 mapRectToScene() 相同。
另请参阅itemTransform(项目变换)、mapToParent(映射到父对象)、mapToScene(映射到场景)、mapFromItem(映射到元素)和图形视图坐标系。
QRectF QGraphicsItem::mapRectToItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const
此便捷函数等价于调用 mapRectToItem(item, QRectF(x, y, w, h))).
QRectF QGraphicsItem::mapRectToParent(const QRectF &rect) const
将此项坐标系中的矩形 rect 映射到其父坐标系统,并以新矩形的形式返回映射后的矩形(即结果多边形的边界矩形)。
另请参阅itemTransform(项目变换)、mapToParent(映射到父对象)、mapToScene(映射到场景)、mapFromItem(映射到元素)和图形视图坐标系。
QRectF QGraphicsItem::mapRectToParent(qreal x, qreal y, qreal w, qreal h) const
此便捷函数等价于调用 mapRectToParent(QRectF(x, y, w, h))).
QRectF QGraphicsItem::mapRectToScene(const QRectF &rect) const
将此项坐标系统中的矩形rect映射到场景坐标系统,并返回映射后的矩形作为新的矩形(即结果多边形的边界矩形)。
另请参阅itemTransform(项目变换)、mapToParent(映射到父对象)、mapToScene(映射到场景)、mapFromItem(映射到元素)和图形视图坐标系。
QRectF QGraphicsItem::mapRectToScene(qreal x, qreal y, qreal w, qreal h) const
这个方便函数与调用mapRectToScene(QRectF(x, y, w, h)))等效。
QPointF QGraphicsItem::mapToItem(const QGraphicsItem *item, const QPointF &point) const
将此项坐标系统中的点point映射到item的坐标系统,并返回映射后的坐标。
如果item是nullptr
,此函数返回的结果与mapToScene相同。
也参见 itemTransform、mapToParent、mapToScene、transform、mapFromItem以及图形视图坐标系统。
QPolygonF QGraphicsItem::mapToItem(const QGraphicsItem *item, const QRectF &rect) const
将此项坐标系统中的矩形rect映射到item的坐标系统,并返回映射后的矩形作为多边形。
如果item是nullptr
,此函数返回的结果与mapToScene相同。
另请参阅itemTransform(项目变换)、mapToParent(映射到父对象)、mapToScene(映射到场景)、mapFromItem(映射到元素)和图形视图坐标系。
QPolygonF QGraphicsItem::mapToItem(const QGraphicsItem *item, const QPolygonF &polygon) const
将此项坐标系统中的多边形polygon映射到item的坐标系统,并返回映射后的多边形。
如果item是nullptr
,此函数返回的结果与mapToScene相同。
另请参阅itemTransform(项目变换)、mapToParent(映射到父对象)、mapToScene(映射到场景)、mapFromItem(映射到元素)和图形视图坐标系。
QPainterPath QGraphicsItem::mapToItem(const QGraphicsItem *item, const QPainterPath &path) const
将此项坐标系统中的路径path映射到item的坐标系统,并返回映射后的路径。
如果item是nullptr
,此函数返回的结果与mapToScene相同。
另请参阅itemTransform(项目变换)、mapToParent(映射到父对象)、mapToScene(映射到场景)、mapFromItem(映射到元素)和图形视图坐标系。
QPointF QGraphicsItem::mapToItem(const QGraphicsItem *item, qreal x, qreal y) const
这是一个重载函数。
此方便函数与调用mapToItem(item, QPointF(x, y)))等效。
QPolygonF QGraphicsItem::mapToItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const
此便捷函数与调用 mapToItem(item, QRectF(x, y, w, h)) 等效。
QPointF QGraphicsItem::mapToParent(const QPointF &point) const
将位于此项目坐标系中的点 point 映射到父坐标系统,并返回映射后的坐标。如果项目没有父对象,则 point 将映射到场景坐标系统。
另请参阅 mapToItem(),mapToScene(),transform(),mapFromParent() 以及 图形视图坐标系。
QPolygonF QGraphicsItem::mapToParent(const QRectF &rect) const
将位于此项目坐标系中的矩形 rect 映射到父坐标系统,并返回映射后的矩形,作为多边形。如果项目没有父对象,则 rect 将映射到场景坐标系统。
另请参阅 mapToScene(),mapToItem(),mapFromParent() 以及 图形视图坐标系。
QPolygonF QGraphicsItem::mapToParent(const QPolygonF &polygon) const
将位于此项目坐标系中的多边形 polygon 映射到父坐标系统,并返回映射后的多边形。如果项目没有父对象,则 polygon 将映射到场景坐标系统。
另请参阅 mapToScene(),mapToItem(),mapFromParent() 以及 图形视图坐标系。
QPainterPath QGraphicsItem::mapToParent(const QPainterPath &path) const
将位于此项目坐标系中的路径 path 映射到父坐标系统,并返回映射后的路径。如果项目没有父对象,则 path 将映射到场景坐标系统。
另请参阅 mapToScene(),mapToItem(),mapFromParent() 以及 图形视图坐标系。
QPointF QGraphicsItem::mapToParent(qreal x, qreal y) const
这是一个重载函数。
此便捷函数等价于调用 mapToParent(QPointF(x, y))。
QPolygonF QGraphicsItem::mapToParent(qreal x, qreal y, qreal w, qreal h) const
此便利函数相当于调用 mapToParent(QRectF(x, y, w, h)。)
QPointF QGraphicsItem::mapToScene(const QPointF &point) const
将位于此项目坐标系统的点point映射到场景坐标系统,并返回映射后的坐标。
另请参阅mapToItem(),mapToParent(),transform(),mapFromScene()以及图形视图坐标系统。
QPolygonF QGraphicsItem::mapToScene(const QRectF &rect) const
将位于此项目坐标系统的矩形rect映射到场景坐标系统,并返回映射的矩形作为多边形。
另请参阅mapToParent(),mapToItem(),mapFromScene()以及图形视图坐标系统。
QPolygonF QGraphicsItem::mapToScene(const QPolygonF &polygon) const
将位于此项目坐标系统的多边形polygon映射到场景坐标系统,并返回映射的多边形。
另请参阅mapToParent(),mapToItem(),mapFromScene()以及图形视图坐标系统。
QPainterPath QGraphicsItem::mapToScene(const QPainterPath &path) const
将位于此项目坐标系统的路径path映射到场景坐标系统,并返回映射的路径。
另请参阅mapToParent(),mapToItem(),mapFromScene()以及图形视图坐标系统。
QPointF QGraphicsItem::mapToScene(qreal x, qreal y) const
这是一个重载函数。
此便利函数相当于调用 mapToScene(QPointF(x, y)。)
QPolygonF QGraphicsItem::mapToScene(qreal x, qreal y, qreal w, qreal h) const
此便利函数相当于调用 mapToScene(QRectF(x, y, w, h)。)
[virtual protected]
void QGraphicsItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
此事件处理程序,针对事件event,可以被重新实现以接收此项目的鼠标双击事件。
当双击一个项目时,项目首先接收到鼠标按下事件,然后是释放事件(即单击),然后是双击事件,最后是释放事件。
在event上调用QEvent::ignore()或QEvent::accept()没有效果。
默认实现调用mousePressEvent()。如果您想在重新实现此函数时保留基本实现,请在您的重新实现中调用QGraphicsItem::mouseDoubleClickEvent()。
请注意,如果项目既不可选择也不可移动(这种情况下忽略单次鼠标点击,这将停止双击的产生),项目将不会接收到双击事件。
另请参见 mousePressEvent(),mouseMoveEvent(),mouseReleaseEvent()和sceneEvent()。
[虚拟受保护]
void QGraphicsItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
此事件处理程序,对于事件event,可以被重新实现以接收此项目的鼠标移动事件。如果您收到此事件,您可以确定该项目也收到鼠标按下事件,并且该项目是当前的鼠标捕获者。
在event上调用QEvent::ignore()或QEvent::accept()没有效果。
默认实现处理基本项目交互,例如选择和移动。如果您想在重新实现此函数时保留基本实现,请在您的重新实现中调用QGraphicsItem::mouseMoveEvent()。
请注意,mousePressEvent()决定哪个图形项目接收到鼠标事件。有关详细信息,请参阅mousePressEvent()的描述。
另请参见 mousePressEvent(),mouseReleaseEvent(),mouseDoubleClickEvent()和sceneEvent()。
[虚拟受保护]
void QGraphicsItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
此事件处理程序,对于事件event,可以被重新实现以接收此项目的鼠标按下事件。鼠标按下事件只会传递给接受已按下的鼠标按钮的项目。默认情况下,项目接受所有鼠标按钮,但您可以通过调用setAcceptedMouseButtons()来更改此设置。
鼠标按下事件决定哪个项目应成为鼠标捕获者(请参阅QGraphicsScene::mouseGrabberItem())。如果您不重新实现此函数,则按下事件将传播到位于该项目下面的顶层项目,并且不会向该项目传递其他鼠标事件。
如果您重新实现了此函数,则默认情况下event将被接受(请参阅QEvent::accept()),然后该项目成为鼠标捕获者。这允许项目接收未来的移动、释放和双击事件。如果您调用QEvent::ignore()上的event,则该项目将失去鼠标捕获,并且event将传播到位于该项目下面的顶层项目。除非收到新的鼠标按下事件,否则不会向该项目传递进一步的事件。
默认实现处理基本项目交互,例如选择和移动。如果您想在重新实现此函数时保留基本实现,请在您的重新实现中调用QGraphicsItem::mousePressEvent()。
此事件用于忽略既不可移动也不可选中的项的QEvent::ignore。
另见:mouseMoveEvent(),mouseReleaseEvent(),mouseDoubleClickEvent(),和sceneEvent。
[虚保护]
void QGraphicsItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
此事件处理器,用于事件event,可以被重写以接收此项的鼠标释放事件。
在event上调用QEvent::ignore()或QEvent::accept()没有效果。
默认实现处理了基本项交互,如选择和移动。如果您在重写此函数时想要保持基本实现,请在您的重写中调用QGraphicsItem::mouseReleaseEvent()。
请注意,mousePressEvent()决定哪个图形项目接收到鼠标事件。有关详细信息,请参阅mousePressEvent()的描述。
另见:mousePressEvent(),mouseMoveEvent(),mouseDoubleClickEvent(),和sceneEvent。
void QGraphicsItem::moveBy(qreal dx, qreal dy)
将项移动dx个单位横向和dy个单位纵向。此函数与调用setPos(pos() + QPointF(dx, dy))等价。
qreal QGraphicsItem::opacity() const
返回此项的局部不透明度,其值在0.0(完全透明)和1.0(完全不透明)之间。此值与父节点和祖先值结合,形成effectiveOpacity。有效不透明度决定了该项的渲染方式,并影响如QGraphicsView::items()等函数查询其可见性时的效果。
不透明度属性决定了传递给paint()函数的画家状态。如果项被缓存,即ItemCoordinateCache或DeviceCoordinateCache,有效属性将应用于渲染项时项的缓存。
默认不透明度为1.0;完全不可透明。
另见:setOpacity(),paint(),ItemIgnoresParentOpacity,和ItemDoesntPropagateOpacityToChildren。
[虚]
QPainterPath QGraphicsItem::opaqueArea() const
此虚拟函数返回一个表示该项不透明区域的形状。一个区域如果使用不透明画笔或颜色填充(即不是透明的),则是不透明的。
此函数被isObscuredBy使用,底层项调用此函数以确定是否被该项遮挡。
默认实现返回一个空的QPainterPath,表示该项完全透明且不会遮挡其他任何项。
另见:isObscuredBy(),isObscured(),和shape()。
[纯虚]
void QGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr)
此函数通常由 QGraphicsView 调用,用于在局部坐标系中绘制项的内容。
在 QGraphicsItem 子类中重写此函数以提供项的绘制实现,使用 painter。参数 option 提供了项的样式选项,如其状态、暴露区域和细节级别提示。参数 widget 是可选的。提供时,它指向正在绘制的控件;否则,它是 0。对于缓存绘制,widget 总是 0。
void RoundRectItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { painter->drawRoundedRect(-10, -10, 20, 20, 5, 5); }
画笔的笔默认是 0 宽度,其笔初始化为从绘制设备的调色板来的 QPalette::Text 油漆。油漆初始化为 QPalette::Window。
务必将所有绘制约束在 boundingRect() 的边界内,以避免渲染错误的图像(因为 QGraphicsView 不会为你剪裁画笔)。特别是,当 QPainter 使用分配的 QPen 绘制形状的轮廓时,轮廓的一半将被绘制在外部,另一半在绘制形状的内部(例如,使用笔宽 2 个单位,必须在 boundingRect() 内绘制轮廓 1 个单位)。QGraphicsItem 不支持使用非零宽度的外观笔。
所有绘制都在局部坐标系中完成。
注意:除非调用过 update(),否则项必须始终以完全相同的方式进行重绘;否则可能会出现视觉错误。换句话说,对 update() 的两次连续调用必须始终产生相同的输出,除非它们之间调用过 update()。
注意:即使没有显式调用 update(),为项启用缓存也不保证图形视图框架只会调用一次 update()。有关详细信息,请参阅 setCacheMode() 的文档。
另请参阅:setCacheMode()、QPen::width()、Item Coordinates 和 ItemUsesExtendedStyleOption。
QGraphicsItem *QGraphicsItem::panel() const
返回项的面板,如果没有面板,则返回 nullptr
。如果是面板,则返回自身。否则,它将返回最近的祖先面板。
另请参阅:isPanel() 和 ItemIsPanel。
QGraphicsItem::PanelModality QGraphicsItem::panelModality() const
返回此项的模态性。
另请参阅:setPanelModality。
QGraphicsItem *QGraphicsItem::parentItem() const
返回指向此项父项的指针。如果没有父项,则返回 nullptr
。
另请参阅:setParentItem() 和 childItems。
QGraphicsObject *QGraphicsItem::parentObject() const
返回一个指向项的父对象指针,转换为QGraphicsObject。如果父项不是QGraphicsObject,则返回nullptr
。
另请参阅parentItem() 和 childItems。
QGraphicsWidget *QGraphicsItem::parentWidget() const
返回指向项的父窗口指针。项的父窗口是其最近的父项,它是一个窗口。
另请参阅parentItem() 和 childItems。
QPointF QGraphicsItem::pos() const
返回项在其父坐标系中的位置。如果项没有父项,其位置将给出场景坐标系。
项的位置描述了其原点(局部坐标系 (0, 0))在父坐标系中的位置;此函数返回与mapToParent(0, 0)相同的结果。
为方便起见,您还可以调用scenePos()来确定项在场景坐标系中的位置,无论其父项如何。
另请参阅x()、y()、setPos()、transform()和图形视图坐标系。
[保护]
void QGraphicsItem::prepareGeometryChange()
为几何变换准备项。在更改项的边框矩形之前调用此函数,以保持QGraphicsScene的索引是最新的。
如果需要,prepareGeometryChange()将调用update()。
示例
void CircleItem::setRadius(qreal newRadius) { if (radius != newRadius) { prepareGeometryChange(); radius = newRadius; } }
另请参阅boundingRect。
void QGraphicsItem::removeSceneEventFilter(QGraphicsItem *filterItem)
从filterItem中移除此项的事件过滤器。
void QGraphicsItem::resetTransform()
将此项的变换矩阵重置为单位矩阵或将所有变换属性重置为其默认值。这相当于调用setTransform(QTransform())
。
另请参阅setTransform()和transform。
qreal QGraphicsItem::rotation() const
返回围绕Z轴的顺时针旋转的角度。默认值是0(即项未旋转)。
另请参阅setRotation()、transformOriginPoint和变换。
qreal QGraphicsItem::scale() const
返回项目缩放因子。默认缩放因子为1.0(即项目未缩放)。
缩放与项目的 rotation(),transform() 和 transformations() 结合起来,以将项目的坐标系映射到父项目。
另请参阅setScale,rotation 和 Transformations。
QGraphicsScene *QGraphicsItem::scene() const
返回当前项目的场景,如果项目没有存储在场景中,则返回 nullptr
。
要将项目添加到场景或将其移动到场景,请调用 QGraphicsScene::addItem。
QRectF QGraphicsItem::sceneBoundingRect() const
返回场景坐标系中此项目的边界矩形,通过将 sceneTransform() 与 boundingRect() 结合来实现。
另请参阅boundingRect() 和 图形视图坐标系。
[虚拟受保护]
bool QGraphicsItem::sceneEvent(QEvent *event)
此虚拟函数接收发送到此项目的事件。重写此函数以在将事件分发到特殊事件处理器 contextMenuEvent,focusInEvent,focusOutEvent,hoverEnterEvent,hoverMoveEvent,hoverLeaveEvent,keyPressEvent,keyReleaseEvent,mousePressEvent,mouseReleaseEvent,mouseMoveEvent 和 mouseDoubleClickEvent 之前拦截事件。
如果事件被识别并处理,则返回 true
;否则,(例如,如果事件类型不被识别,)则返回 false
。
event 是拦截的事件。
[虚拟受保护]
bool QGraphicsItem::sceneEventFilter(QGraphicsItem *watched,QEvent *event)
过滤项目 watched 的事件。 event 是过滤的事件。
在子类中重写此函数可以使项目作为其他项目的逻辑事件处理程序,在它可以响应之前拦截发送到这些项目的所有事件。
重写必须返回 true
以防止进一步处理给定事件,确保它不会传递给 watched 项目,或返回 false
以指示事件应被事件系统进一步传播。
QPointF QGraphicsItem::scenePos() const
返回项目在场景坐标系中的位置。这相当于调用 mapToScene(0, 0)
。
另见 pos(),sceneTransform() 和 图形视图坐标系统。
QTransform QGraphicsItem::sceneTransform() const
返回此项的视图变换矩阵。该矩阵可用于将此项的局部坐标系中的坐标和几何形状映射到视图坐标系。要从场景映射坐标,您必须首先反转返回的矩阵。
示例
QGraphicsRectItem rect; rect.setPos(100, 100); rect.sceneTransform().map(QPointF(0, 0)); // returns QPointF(100, 100); rect.sceneTransform().inverted().map(QPointF(100, 100)); // returns QPointF(0, 0);
与仅返回项的局部变换的 transform() 不同,此函数包括项(及其任何父项)的位置和所有变换属性。
另见 transform,setTransform,scenePos,图形视图坐标系统 和 变换。
void QGraphicsItem::scroll(qreal dx,qreal dy,const QRectF &rect = QRectF())
通过 dx,dy 滚动 rect 的内容。如果 rect 是一个空矩形(默认),则滚动项的边界矩形。
滚动提供了在内容垂直或水平移位时简单的重绘的快速替代方案。根据当前的变换和绘图设备(即视口)的功能,此操作可能仅为使用 memmove() 将像素从一个位置移动到另一个位置。在大多数情况下,这比重新绘制整个区域更快。
滚动后,项将发布一个更新,以便于新暴露的区域。如果不支持滚动(例如,您正在渲染到 OpenGL 视口,它不受滚动优化的益处),则此函数与调用 update(rect) 等效。
注意: 仅在启用 QGraphicsItem::ItemCoordinateCache 时才支持滚动;在其他所有情况下调用此函数与调用 update(rect) 等效。如果您确信该项不透明且不被其他项覆盖,您可以将 rect 映射到视口坐标并滚动视口。
QTransform xform = item->deviceTransform(view->viewportTransform()); QRect deviceRect = xform.mapRect(rect).toAlignedRect(); view->viewport()->scroll(dx, dy, deviceRect);
另请参阅boundingRect。
void QGraphicsItem::setAcceptDrops(bool on)
如果 on 为真,则该项将接受拖放事件;否则,它对拖放事件来说是透明的。默认情况下,项不接受拖放事件。
另见 acceptDrops。
void QGraphicsItem::setAcceptHoverEvents(bool enabled)
如果 enabled 为真,则该项将接受悬停事件;否则,它会忽略它们。默认情况下,项不接受悬停事件。
当没有当前鼠标抓取项时传递悬停事件。当鼠标光标进入项、在项内部移动以及光标离开项时发送事件。悬停事件通常用于在进入时突出显示项,以及跟踪鼠标光标在项上悬停的位置(相当于 QWidget::mouseTracking)。
父元素在它们的子元素之前接收到悬停进入事件,在它们的子元素之后接收到离开事件。但当一个光标进入子元素时,父元素不会接收到悬停离开事件;父元素保持在“悬停”状态,直到光标离开其区域,包括其子元素的区域。
如果一个父元素处理子元素的事件,那么它将在光标通过其子元素时接收悬停移动、拖动移动和放下事件,但不会代表其子元素接收悬停进入和悬停离开事件,也不会接收拖动进入和拖动离开事件。
带有窗口装饰的 QGraphicsWidget 不论 acceptHoverEvents() 的值如何都会接受悬停事件。
请参阅以下内容acceptHoverEvents、hoverEnterEvent、hoverMoveEvent 和 hoverLeaveEvent。
void QGraphicsItem::setAcceptTouchEvents(bool enabled)
如果 enabled 为 true,此项目将接受 触摸事件;否则,将忽略它们。默认情况下,项目不接受触摸事件。
请参阅以下内容acceptTouchEvents。
void QGraphicsItem::setAcceptedMouseButtons(Qt::MouseButtons buttons)
设置此项目接受鼠标事件的鼠标 buttons。
默认情况下,接受所有鼠标按钮。如果一个项目接受鼠标按钮,则当将鼠标压下事件发送到该按钮时,它将成为鼠标抓取项目。但是,如果项目不接受鼠标按钮,QGraphicsScene 将将鼠标事件转发到其下第一个接受该鼠标按钮的项目。
要禁用项目的鼠标事件(即,使项目对鼠标事件透明),请调用 setAcceptedMouseButtons(Qt::NoButton)。
请参阅以下内容acceptedMouseButtons 和 mousePressEvent。
void QGraphicsItem::setActive(bool active)
如果 active 为 true,并且场景是活动的,则此项目的面板将被激活。否则,面板将被停用。
如果项目不是活动场景的一部分,active 将决定当场景变为活动状态或项目被添加到场景时会对面板发生什么。如果为 true,则当项目被添加到场景或场景变为活动状态时,项目面板将被激活。否则,项目将独立于场景的活动状态保持不活动状态。
请参阅以下内容isPanel、QGraphicsScene::setActivePanel 和 QGraphicsScene::isActive。
void QGraphicsItem::setBoundingRegionGranularity(qreal granularity)
设置边界区域的粒度到 granularity;一个在 0 和 1 之间(包括)的值。默认值是 0(即最低粒度,其中边界区域对应于项目的边界矩形)。
粒度被boundingRegion()函数使用,用于计算项目的边界区域应该有多精细。可达到的最高粒度为1,此时boundingRegion()将返回相应设备(例如,对于QGraphicsView的视口,这将提供一个像素完美的边界区域)的可能最精细轮廓。最可能的粒度是0。粒度granularity的值描述了设备分辨率和边界区域分辨率的比值(例如,值为0.25将提供一个区域,其中每个块对应4x4设备单元/像素)。
另请参阅boundingRegionGranularity。
void QGraphicsItem::setCacheMode(QGraphicsItem::CacheMode mode, const QSize &logicalCacheSize = QSize())
将项目的缓存模式设置为mode。
可选的logicalCacheSize参数只在ItemCoordinateCache模式中使用,它描述了缓存缓冲区的分辨率;如果logicalCacheSize为(100, 100),则无论项目的逻辑大小如何,QGraphicsItem都将将项适入图形内存中的100x100像素。默认情况下,QGraphicsItem使用boundingRect()的大小。对于所有其他缓存模式,logicalCacheSize都将被忽略。
缓存可以提高渲染速度,如果您的项花费大量时间重新绘制自身。在某些情况下,缓存也可能减慢渲染,特别是当项重新绘制的时间少于QGraphicsItem从缓存重新绘制时。
当启用缓存时,项的paint()函数通常会在离屏位图中绘制;对于任何随后的重新绘制请求,图形视图框架将重新从缓存中绘制。此方法与QGLWidget特别兼容,它将所有缓存存储为OpenGL纹理。
请注意,可能需要更改QPixmapCache的缓存限制,以获得最佳性能。
您可以在CacheMode文档中了解更多有关不同缓存模式的信息。
注意:启用缓存并不意味着仅在对项目调用显式的update()响应时调用项目的paint()功能。例如,在内存压力下,Qt可能会决定丢弃一些缓存信息;在这些情况下,即使没有update()调用(即,正如未启用缓存时一样),也会调用项目的paint()功能。
另请参阅cacheMode()、CacheMode和QPixmapCache::setCacheLimit。
void QGraphicsItem::setCursor(const QCursor &cursor)
将项目的当前光标形状设置为cursor。当鼠标光标悬停在此项上时,将采用此形状。有关各种有用形状的课程,请参阅预定义光标对象列表。
编辑器项可能想使用 I-beam 光标
item->setCursor(Qt::IBeamCursor);
如果没有设置指针,则使用项下方的指针。
另请参阅 cursor(),hasCursor(),unsetCursor(),QWidget::cursor 和 QGuiApplication::overrideCursor。
void QGraphicsItem::setData(int key, const QVariant &value)
将此项目针对键 key 的自定义数据设置 value。
自定义项目数据对于存储任何项目的任意属性很有用。Qt 不使用此功能来存储数据;它仅提供供用户使用的便利。
另请参阅 data。
void QGraphicsItem::setEnabled(bool enabled)
如果 enabled 是 true,则启用项目;否则,禁用它。
禁用的项目是可见的,但它们不会接收任何事件,也不能获得焦点或被选中。鼠标事件被丢弃;除非项目也不可见,或者项目不接受鼠标事件(请参阅 acceptedMouseButtons()),否则这些事件不会传播。禁用的项目不能成为鼠标捕获者,因此,当一个项目在抓获鼠标时被禁用,它就像在禁用时有焦点时一样会失去焦点。
通常使用灰度颜色绘制禁用的项目(请参阅 QPalette::Disabled)。
如果您禁用一个父项目,所有子项目也将被禁用。如果您启用一个父项目,则所有子项目将被启用,除非它们已被显式禁用(即,如果您在子项目上调用 setEnabled(false),那么当父项目被禁用并再次启用时,它将不会被重新启用)。
项目默认是启用的。
注意:如果您安装了一个事件过滤器,您仍然可以在事件传递给项目之前拦截事件;此机制忽略项目的启用状态。
另请参阅 isEnabled。
void QGraphicsItem::setFiltersChildEvents(bool enabled)
如果 enabled 是 true,则将此项目设置为过滤所有其子项目的事件(即,而不是发送给任何其子项目的事件,所有事件都发送到此项目);否则,如果 enabled 是 false,则此项目将仅处理自己的事件。默认值为 false。
另请参阅 filtersChildEvents。
void QGraphicsItem::setFlag(QGraphicsItem::GraphicsItemFlag flag, bool enabled = true)
如果 enabled 是 true,则启用项目标志 flag;否则,禁用它。
void QGraphicsItem::setFlags(QGraphicsItem::GraphicsItemFlags flags)
将项目标志设置为 flags。在 flags 中的所有标志都被启用;不在 flags 中的所有标志都被禁用。
如果项目具有焦点且 标志 未启用 ItemIsFocusable,则调用此函数后,项目会失去焦点。同样,如果项目已被选中,且 标志 未启用 ItemIsSelectable,则会自动取消选中。
默认情况下,未启用任何标志。(QGraphicsWidget 默认启用 ItemSendsGeometryChanges 标志以跟踪位置变化。)
void QGraphicsItem::setFocus(Qt::FocusReason focusReason = Qt::OtherFocusReason)
给该项目分配键盘输入焦点。此 focusReason 参数将传递给由该函数生成的任何 焦点事件;它用于解释导致项目得到焦点的具体情况。
只有启用了设置 ItemIsFocusable 标志的项目才能接受键盘焦点。
如果此项目不可见、不活跃或未与场景关联,则不会立即获得输入焦点。但是,如果它后来变可见,它将为联系到的项的子树作为首选焦点项。
调用此函数后,该项目将接收一个 焦点进入事件,其中包含 focusReason。如果另一项目已经具有焦点,则该项目将首先接收一个 焦点离开事件,指示它已失去输入焦点。
另请参阅clearFocus、hasFocus、focusItem 和 focusProxy。
void QGraphicsItem::setFocusProxy(QGraphicsItem *item)
设置项目的焦点代理为item。
如果一个项目有焦点代理,则当项目获得输入焦点时,焦点代理将获得输入焦点。该项目本身仍然具有焦点(即,hasFocus() 将返回 true),但只有焦点代理将接收键盘输入。
焦点代理本身也可以有焦点代理,依此类推。在这种情况下,键盘输入将由最外层的焦点代理处理。
焦点代理 item 必须属于与此项目相同的场景。
另请参阅focusProxy、setFocus 和 hasFocus。
void QGraphicsItem::setGraphicsEffect(QGraphicsEffect *effect)
将effect 设置为项目的效果。如果该项目已安装了效果,那么 QGraphicsItem 将在安装新effect 之前删除现有效果。您可以通过调用 setGraphicsEffect(nullptr
) 来删除现有效果。
如果 effect 是另一个项目的已安装效果,则 setGraphicsEffect() 将从项目删除效果并将其安装在此项目上。
QGraphicsItem 会接管 effect。
注意:此函数将在此元素及其所有子元素上应用效果。
另请参阅graphicsEffect。
void QGraphicsItem::setGroup(QGraphicsItemGroup *group)
将此项目添加到项目组 group。如果 group 为 nullptr
,则此项目将从任何当前组中删除,并作为前一个组父级的子级添加。
另请参阅group 和 QGraphicsScene::createItemGroup。
void QGraphicsItem::setInputMethodHints(Qt::InputMethodHints hints)
设置此项目的当前输入法提示为 hints。
另请参阅inputMethodHints 和 inputMethodQuery。
void QGraphicsItem::setOpacity(qreal opacity)
设置此项目的本地 opacity,介于 0.0(透明)和 1.0(不透明)之间。项目的本地不透明度与父项和祖先项的不透明度结合成 effectiveOpacity。
默认情况下,不透明度从父项传播到子项,因此如果父项的不透明度为 0.5,子项也为 0.5,子项的有效不透明度将为 0.25。
不透明度属性决定了传递给paint()函数的画家状态。如果项被缓存,即ItemCoordinateCache或DeviceCoordinateCache,有效属性将应用于渲染项时项的缓存。
有两个项目标志会影响项目的不透明度与父项的组合方式:ItemIgnoresParentOpacity 和 ItemDoesntPropagateOpacityToChildren。
注意:将项目的不透明度设置为 0 不会使项目不可见(根据 isVisible),但项目将像不可见的项一样处理。有关更多信息,请参阅 setVisible 的文档。
另请参阅opacity、effectiveOpacity 和 setVisible。
void QGraphicsItem::setPanelModality(QGraphicsItem::PanelModality panelModality)
将此项目的工作模式设置为 panelModality。
更改可见项目的工作模式将立即生效。
另请参阅panelModality。
void QGraphicsItem::setParentItem(QGraphicsItem *newParent)
将此项目的父项设置为 newParent。如果此项目已有一个父项,则它首先将从先前的父项中删除。如果 newParent 为 0,则此项目将成为顶层项。
请注意,这将隐式地将此图形项添加到父项的场景中。您不应自己将项目添加到场景中。
在 newParent 的祖先项上调用此函数时的行为是未定义的。
另请参阅parentItem() 和 childItems。
void QGraphicsItem::setPos(const QPointF &pos)
将项目的位置设置为 pos,这位于父项坐标中。对于没有父项的项目,pos 位于场景坐标中。
物品位置描述其在父坐标中的位置及其原点(局部坐标(0,0))。
另请参阅pos(位置),scenePos(场景位置)以及图形视图坐标系统。
void QGraphicsItem::setPos(qreal x, qreal y)
这是一个重载函数。
此便利函数等同于调用setPos(QPointF(x, y))。
void QGraphicsItem::setRotation(qreal angle)
设置顺时针旋转角度angle,单位为度,围绕Z轴进行。默认值为0(即项目没有旋转)。分配负值将使项目逆时针旋转。通常,旋转角度在(-360, 360)范围内,但也可能分配此范围之外(例如旋转370度与旋转10度相同)。
项目是在其变换原点处旋转的,默认情况下是(0, 0)。您可以调用setTransformOriginPoint来选择不同的变换原点。
另请参阅rotation(旋转)、setTransformOriginPoint(设置变换原点)以及变换。
void QGraphicsItem::setScale(qreal factor)
设置项目的比例factor。默认比例因子为1.0(即项目未缩放)。比例因子为0.0将使项目塌陷成单一点。如果您提供负的比例因子,项目将翻转和镜像(即旋转180度)。
项目是在其变换原点处缩放的,默认情况下是(0, 0)。您可以调用setTransformOriginPoint来选择不同的变换原点。
缩放与项目的 rotation(),transform() 和 transformations() 结合起来,以将项目的坐标系映射到父项目。
另请参阅scale(比例)、setTransformOriginPoint(设置变换原点)以及变换示例。
void QGraphicsItem::setSelected(bool selected)
如果selected为true且项目是可选择的,则该项目被选中;否则,它取消选中。
如果项目在组中,此函数将切换整个组的选中状态。如果组被选中,则组中的所有项目也将被选中,如果组未选择,则组中没有任何项目被选中。
只有可见、启用和可选择的项目才能被选中。如果selected为true且项目是看不见的或禁用的或不可选择的,此函数不起任何作用。
默认情况下,项目不能被选择。为了启用选择,请设置ItemIsSelectable标记。
此函数提供方便,允许单独切换项目的选中状态。但是,更常见的选择项目的方式是调用QGraphicsScene::setSelectionArea,这将为此场景中指定区域内的所有可见、启用的和可选择的项目调用此函数。
另请参阅isSelected()和QGraphicsScene::selectedItems。
void QGraphicsItem::setToolTip(const QString &toolTip)
设置项目的工具提示为toolTip。如果toolTip为空,则清除项目的工具提示。
void QGraphicsItem::setTransform(const QTransform &matrix, bool combine = false)
将项目的当前变换矩阵设置为matrix。
如果combine为真,那么matrix将与当前矩阵组合;否则,matrix将替换当前矩阵。combine默认为假。
为了简化使用变换视图与项目交互,QGraphicsItem提供了mapTo...和mapFrom...函数,这些函数可以在项目坐标和场景坐标之间进行转换。例如,您可以调用mapToScene()将项目坐标映射为场景坐标,或者调用mapFromScene()从场景坐标映射到项目坐标。
变换矩阵与项目的rotation()、scale()以及transformations()组合成一个组合变换,该变换将项目的坐标系统映射到其父级。
另请参阅transform()、setRotation()、setScale()、setTransformOriginPoint()、图形视图坐标系以及变换。
void QGraphicsItem::setTransformOriginPoint(const QPointF &origin)
设置项目坐标中的变换原点origin。
另请参阅transformOriginPoint()和变换。
void QGraphicsItem::setTransformOriginPoint(qreal x, qreal y)
这是一个重载函数。
设置项目坐标中的变换原点。这相当于调用setTransformOriginPoint(QPointF(x, y))。
另请参阅setTransformOriginPoint()和变换。
void QGraphicsItem::setTransformations(const QList<QGraphicsTransform *> &transformations)
设置应用到此项目的图形变换transformations列表。
如果您只想旋转或缩放一个项目,应调用setRotation()或setScale()。如果要在项目上设置任意变换,可以调用setTransform()。
QGraphicsTransform 用于应用和控制项上的一系列单独的转换操作。它在动画中使用尤为有效,此时每个转换操作都需要独立或以不同的方式插值。
这些转换与项的 rotation()、scale() 和 transform() 结合,将项的坐标系映射到父项。
另请参阅:transformations、scale、setTransformOriginPoint 和 Transformations。
void QGraphicsItem::setVisible(bool visible)
如果 visible 为 true,则使项可见。否则,项不可见。不可见的项不会被绘制,也不接收任何事件。特别是,鼠标事件会穿过不可见的项,并且传递给可能在其后面的任何项。不可见的项也无法选择,不能获得输入焦点,并且不会被 QGraphicsScene 的项位置函数检测。
如果在抓取鼠标时项变为不可见,(即它正在接收鼠标事件时),它会自动失去鼠标抓取,并且即使使项再次可见,也无法恢复抓取;必须接收到一个新鼠标点击才能重新获得鼠标抓取。
同样,不可见项也无法获得焦点,因此如果项在变为不可见时具有焦点,它将失去焦点,而且仅仅使其可见并不能恢复焦点。
如果您隐藏父项,所有子项也将被隐藏。如果您显示父项,所有子项都将显示,除非它们已被显式隐藏(例如,如果您对子项调用 setVisible(false),即使其父项被隐藏,然后再次显示,它也不会被重新显示)。
项默认是可见的;对新项调用 setVisible() 是不必要的。
注意:透明度设置为 0 的项仍将被视为可见,尽管它会像不可见项一样被处理:鼠标事件会穿过它,它不会被包含在由 QGraphicsView::items() 返回的项中,等等。然而,该项将保持焦点。
另请参阅:isVisible、show、hide 和 setOpacity。
void QGraphicsItem::setX(qreal x)
设置项位置 x 坐标。相当于调用 setPos(x, y()).
void QGraphicsItem::setY(qreal y)
设置项位置 y 坐标。相当于调用 setPos(x(), y).
void QGraphicsItem::setZValue(qreal z)
将项目的Z值设置为z。Z值决定兄弟(相邻)元素的堆叠顺序。具有较高Z值的兄弟元素始终绘制在具有较低Z值的另一个兄弟元素上方。
恢复Z值后,项目的插入顺序将决定其堆叠顺序。
Z值以任何方式都不影响元素的大小。
默认Z值为0。
另请参阅zValue()、排序、stackBefore()和ItemStacksBehindParent。
[虚函数]
QPainterPath QGraphicsItem::shape() const
返回此元素的形状作为局部坐标中的QPainterPath。形状被用于很多事情,包括碰撞检测、碰撞测试以及QGraphicsScene::items()函数。
默认实现调用boundingRect()返回一个简单的矩形形状,但子类可以重新实现此函数以返回适用于非矩形元素的更准确的形状。例如,圆形项目可以选择返回椭圆形形状以获得更好的碰撞检测。例如
QPainterPath RoundItem::shape() const { QPainterPath path; path.addEllipse(boundingRect()); return path; }
形状的轮廓可能取决于绘制时使用的笔的宽度和样式。如果您想将此轮廓包含在项目的形状中,您可以使用QPainterPathStroker从描边创建形状。
此函数由contains()和collidesWithPath的默认实现调用。
另请参阅boundingRect()、contains()、prepareGeometryChange()和QPainterPathStroker。
void QGraphicsItem::show()
显示项目(项目默认可见)。
此便利函数与调用setVisible(true)
等价。
另请参阅hide()和setVisible。
void QGraphicsItem::stackBefore(const QGraphicsItem *兄弟)
将项目堆叠在兄弟之前,其中兄弟必须是一个兄弟元素(即,两个元素必须共享同一个父元素,或者都必须是顶级元素)。兄弟必须与本项目具有相同的Z值,否则调用此函数将不会产生影响。
默认情况下,所有兄弟元素都是按插入顺序堆叠的(即,您首先添加的元素将绘制在您下一个添加的元素之前)。如果有两个元素的Z值不同,则具有最高Z值的元素绘制在顶部。当Z值相同,插入顺序将决定堆叠顺序。
另请参阅setZValue()、ItemStacksBehindParent和排序。
QGraphicsObject *QGraphicsItem::toGraphicsObject()
如果类实际上是图形对象,则返回图形项转换为QGraphicsObject,否则返回0。
常量 QGraphicsObject *QGraphicsItem::toGraphicsObject() const
如果类实际上是图形对象,则返回图形项转换为QGraphicsObject,否则返回0。
QString QGraphicsItem::toolTip() const
返回项目的工具提示,如果没有设置工具提示,则返回一个空的QString。
参阅setToolTip() 和 QToolTip。
QGraphicsItem *QGraphicsItem::topLevelItem() const
返回此项目的顶层项目。顶层项目是该项目的最顶层祖先项,其父项是 nullptr
。如果一个项没有父项,则返回其自身的指针(即,顶层项是其自身的顶层项)。
另请参阅parentItem().
QGraphicsWidget *QGraphicsItem::topLevelWidget() const
返回指向项目顶层小部件的指针(即,该项目的祖先,其父项是 nullptr
,或者其父项不是一个小部件),或者如果此项目没有顶层小部件,则返回 nullptr
。如果该项是其自身的顶层小部件,则此函数返回指向该项自身的指针。
QTransform QGraphicsItem::transform() const
返回此项的变换矩阵。
变换矩阵与该项的 rotation()、scale() 和 transformations() 结合,形成该项的综合变换。
默认变换矩阵是单位矩阵。
参阅setTransform() 和 sceneTransform。
QPointF QGraphicsItem::transformOriginPoint() const
返回在此项坐标中变换的原点。
默认为 QPointF(0,0)。
另请参阅setTransformOriginPoint()和变换。
QList<QGraphicsTransform *> QGraphicsItem::transformations() const
返回应用于此项的图形变换列表。
QGraphicsTransform 用于应用和控制项上的一系列单独的转换操作。它在动画中使用尤为有效,此时每个转换操作都需要独立或以不同的方式插值。
这些转换与项的 rotation()、scale() 和 transform() 结合,将项的坐标系映射到父项。
参阅setTransformations()、scale()、rotation()、transformOriginPoint() 和 变换。
[虚函数]
int QGraphicsItem::type() const
返回项类型作为 int。所有标准图形项类都与一个唯一的值相关联;参见 QGraphicsItem::Type。此类信息由 qgraphicsitem_cast() 用于区分类型。
默认实现(在 QGraphicsItem 中)返回 UserType。
要启用与自定义项一起使用 qgraphicsitem_cast(),重新实现此函数并声明一个与您的自定义项的类型相等的 Type 枚举值。自定义项必须返回一个大于或等于 UserType(65536)的值。
例如:
class CustomItem : public QGraphicsItem { public: enum { Type = UserType + 1 }; int type() const override { // Enable the use of qgraphicsitem_cast with this item. return Type; } ... };
另请参阅 用户类型.
void QGraphicsItem::ungrabKeyboard()
释放键盘捕获。
另请参阅 grabKeyboard() 和 ungrabMouse().
void QGraphicsItem::ungrabMouse()
释放鼠标捕获。
另请参阅 grabMouse() 和 ungrabKeyboard().
void QGraphicsItem::unsetCursor()
从该项中清除鼠标光标。
另请参阅 hasCursor() 和 setCursor().
void QGraphicsItem::update(const QRectF &rect = QRectF())
安排在此项覆盖的区域 rect 上的重绘。当您的项需要重绘时,例如如果外观或大小发生更改,您可以调用此函数。
此函数不会立即引起绘制;相反,它在控制到达事件循环后安排一个绘制请求,由 QGraphicsView 处理。项只有在其关联视图中可见时才会重绘。
物品重新绘制的副作用可能也会使覆盖区域 rect 的其他物品重新绘制。
如果项不可见(即,isVisible() 返回 false
),此函数不起作用。
另请参阅 paint() 和 boundingRect().
void QGraphicsItem::update(qreal x, qreal y, qreal width, qreal height)
这是一个重载函数。
此便利函数与调用 update(QRectF(x, y, width, height))) 等效。
[protected]
void QGraphicsItem::updateMicroFocus()
更新项的微聚焦。
另请参阅 QInputMethod.
[virtual protected]
void QGraphicsItem::wheelEvent(QGraphicsSceneWheelEvent *event)
此事件处理程序,对于事件 event,可以重新实现以接收此项的轮事件。如果您实现此函数,则默认接受 event。
如果忽略事件(例如,通过调用 QEvent::ignore()),则它将传播到该项下方的任何项。如果没有项接受事件,则场景将忽略事件,并将其传播到视图(例如,视图的垂直滚动条)。
默认实现忽略事件。
另请参阅 sceneEvent()。
QGraphicsWidget *QGraphicsItem::window() const
返回项目的窗口,如果没有窗口则返回 nullptr。如果项目是窗口,则返回自身。否则返回最近的父窗口。
另请参阅 QGraphicsWidget::isWindow()。
qreal QGraphicsItem::x() const
此便捷函数等价于调用 pos().x()。
qreal QGraphicsItem::y() const
此便捷函数等价于调用 pos().y()。
qreal QGraphicsItem::zValue() const
返回项目的Z值。Z值影响同级(相邻)项目的堆叠顺序。
默认Z值为0。
另请参阅 setZValue(),排序,stackBefore() 和 ItemStacksBehindParent。
相关非成员
template <typename T> T qgraphicsitem_cast(QGraphicsItem *item)
如果给出的 item 是类型 T,则返回将其转换为类型 T;否则返回 nullptr。
注意:为了使此函数在自定义项目中正确工作,为每个自定义 QGraphicsItem 子类重新实现 type() 函数。
另请参阅 QGraphicsItem::type() 和 QGraphicsItem::UserType。
© 2024 The Qt Company Ltd. 本文档中的文献贡献是其各自所有者的版权。本文档按 Free Software Foundation 发布的 GNU Free Documentation License 1.3 版本许可。Qt 及其相应标志是 The Qt Company Ltd. 在芬兰和/或在世界上其他国家的 商标。所有其他商标均为其各自所有者的财产。