QGraphicsItem Class
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 |
公共类型
enum | CacheMode { NoCache, ItemCoordinateCache, DeviceCoordinateCache } |
enum | GraphicsItemChange { ItemEnabledChange, ItemEnabledHasChanged, ItemPositionChange, ItemPositionHasChanged, ItemTransformChange, …, ItemScenePositionHasChanged } |
enum | GraphicsItemFlag { ItemIsMovable, ItemIsSelectable, ItemIsFocusable, ItemClipsToShape, ItemClipsChildrenToShape, …, ItemContainsChildrenInShape } |
flags | GraphicsItemFlags |
enum | PanelModality { NonModal, PanelModal, SceneModal } |
enum | anonymous { Type, UserType } |
公共函数
QGraphicsItem(QGraphicsItem*parent= nullptr) | |
虚拟 | ~QGraphicsItem() |
bool | acceptDrops() const |
bool | acceptHoverEvents() const |
bool | acceptTouchEvents() const |
Qt::MouseButtons | acceptedMouseButtons()常量 |
虚拟 void | advance(intphase) |
虚拟 QRectF | boundingRect() 常量 = 0 |
QRegion | boundingRegion(const QTransform&itemToDeviceTransform) const |
qreal | boundingRegionGranularity()常量 |
QGraphicsItem::CacheMode | cacheMode()常数 |
QList<QGraphicsItem *> | childItems()常量 |
QRectF | childrenBoundingRect() const |
void | clearFocus() |
QPainterPath | clipPath()常量 |
虚拟 bool | collidesWithItem(const QGraphicsItem*other, Qt::ItemSelectionModemode= Qt::IntersectsItemShape) const |
虚拟 bool | collidesWithPath(const QPainterPath&path, Qt::ItemSelectionModemode= Qt::IntersectsItemShape) const |
QList<QGraphicsItem *> (Qt::ItemSelectionMode) | collidingItems(Qt::ItemSelectionModemode= Qt::IntersectsItemShape) const |
QGraphicsItem * | commonAncestorItem(const QGraphicsItem*other) const |
虚拟 bool | contains(const QPointF&point) const |
光标 | cursor()常量 |
QVariant | data(intkey) const |
QTransform | deviceTransform(const QTransform&viewportTransform) const |
qreal | effectiveOpacity()常数 |
void | ensureVisible(const QRectF&rect= QRectF(), intxmargin= 50, intymargin= 50) |
void | ensureVisible(qrealx, qrealy, qrealw, qrealh, intxmargin= 50, intymargin= 50) |
bool | filtersChildEvents() 常量 |
QGraphicsItem::GraphicsItemFlags | flags()常量 |
QGraphicsItem * QGraphicsItem | focusItem常量 |
QGraphicsItem * * QGraphicsItem | focusProxy()常量 |
void | grabKeyboard() |
void | grabMouse() |
QGraphicsEffect * | graphicsEffect()常量 |
QGraphicsItemGroup * ( | group()常量 |
bool | hasCursor()常量 |
bool | hasFocus()常量 |
void | hide() |
Qt::InputMethodHints | inputMethodHints()常量 |
void | installSceneEventFilter(QGraphicsItem*filterItem) |
bool | isActive()常量 |
bool | isAncestorOf(const QGraphicsItem*child) const |
bool | isBlockedByModalPanel(QGraphicsItem**blockingPanel= nullptr) const |
bool | isClipped()常量 |
bool | isEnabled() const |
bool | isObscured(const QRectF&rect= QRectF()) const |
bool | isObscured(qrealx, qrealy, qrealw, qrealh) const |
虚拟 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()常量 |
bool | isWindow()常量 |
QTransform | itemTransform(const QGraphicsItem*other, bool*ok= nullptr) const |
QPainterPath | mapFromItem(const QGraphicsItem*item, const QPainterPath&path) const |
QPointF | mapFromItem(const QGraphicsItem*item, const QPointF&point) const |
QPolygonF | mapFromItem(const QGraphicsItem*item, const QPolygonF&polygon) const |
QPolygonF | mapFromItem(const QGraphicsItem*item, const QRectF&rect) const |
QPolygonF | mapFromItem(const QGraphicsItem*item, qrealx, qrealy, qrealw, qrealh) const |
QPointF | mapFromItem(const QGraphicsItem*item, qrealx, qrealy) const |
QPainterPath | mapFromParent(const QPainterPath&path) const |
QPointF | mapFromParent(const QPointF&point) const |
QPolygonF | mapFromParent(const QPolygonF&polygon) const |
QPolygonF | mapFromParent(const QRectF&rect) const |
QPolygonF | mapFromParent(qrealx, qrealy, qrealw, qrealh) const |
QPointF | mapFromParent(qrealx、qrealy) const |
QPainterPath | mapFromScene(const QPainterPath&path) const |
QPointF | mapFromScene(const QPointF&point) const |
QPolygonF | mapFromScene(const QPolygonF&polygon) const |
QPolygonF | mapFromScene(const QRectF&rect) const |
QPolygonF | mapFromScene(qrealx, qrealy, qrealw, qrealh) const |
QPointF | mapFromScene(qrealx、qrealy) const |
QRectF | mapRectFromItem(const QGraphicsItem*item, const QRectF&rect) const |
QRectF | mapRectFromItem(const QGraphicsItem*item, qrealx, qrealy, qrealw, qrealh) const |
QRectF | mapRectFromParent(const QRectF&rect) const |
QRectF | mapRectFromParent(qrealx, qrealy, qrealw, qrealh) const |
QRectF | mapRectFromScene(const QRectF&rect) const |
QRectF | mapRectFromScene(qrealx, qrealy, qrealw, qrealh) const |
QRectF | mapRectToItem(const QGraphicsItem*item, const QRectF&rect) const |
QRectF | mapRectToItem(const QGraphicsItem*item, qrealx, qrealy, qrealw, qrealh) const |
QRectF | mapRectToParent(const QRectF&rect) const |
QRectF | mapRectToParent(qrealx, qrealy, qrealw, qrealh) const |
QRectF | mapRectToScene(const QRectF&rect) const |
QRectF | mapRectToScene(qrealx, qrealy, qrealw, qrealh) const |
QPainterPath | mapToItem(const QGraphicsItem*item, const QPainterPath&path) const |
QPointF | mapToItem(const QGraphicsItem*item, const QPointF&point) const |
QPolygonF | mapToItem(const QGraphicsItem*item, const QPolygonF&polygon) const |
QPolygonF | mapToItem(const QGraphicsItem*item, const QRectF&rect) const |
QPolygonF | mapToItem(const QGraphicsItem*item, qrealx, qrealy, qrealw, qrealh) const |
QPointF | mapToItem(const QGraphicsItem*item, qrealx, qrealy) const |
QPainterPath | mapToParent(const QPainterPath&path) const |
QPointF | mapToParent(const QPointF&point) const |
QPolygonF | mapToParent(const QPolygonF&polygon) const |
QPolygonF | mapToParent(const QRectF&rect) const |
QPolygonF | mapToParent(qrealx, qrealy, qrealw, qrealh) const |
QPointF | mapToParent(qrealx、qrealy) const |
QPainterPath | mapToScene(const QPainterPath&path) const |
QPointF | mapToScene(const QPointF&point) const |
QPolygonF | mapToScene(const QPolygonF&polygon) const |
QPolygonF | mapToScene(const QRectF&rect) const |
QPolygonF | mapToScene(qrealx, qrealy, qrealw, qrealh) const |
QPointF | mapToScene(qrealx, qrealy) const |
void | moveBy(qrealdx, qrealdy) |
qreal | opacity()常量 |
虚拟 QPainterPath | opaqueArea()常量 |
虚拟 void | paint(QPainter*painter, const QStyleOptionGraphicsItem*option, QWidget*widget= nullptr) = 0 |
QGraphicsItem * | panel()常量 |
QGraphicsItem::PanelModality | panelModality()常量 |
QGraphicsItem * () | parentItem()常量 |
QGraphicsObject * | parentObject()常量 |
QGraphicsWidget * () | parentWidget()常量 |
QPointF | pos()常量 |
void | removeSceneEventFilter(QGraphicsItem*filterItem) |
void | resetTransform() |
qreal | rotation()常量 |
qreal | scale()常量 |
QGraphicsScene * | scene() const |
QRectF | sceneBoundingRect() const |
QPointF | scenePos()常量 |
QTransform | sceneTransform()常数 |
void | scroll(qrealdx, qrealdy, const QRectF&rect= QRectF()) |
void | setAcceptDrops(boolon) |
void | setAcceptHoverEvents(boolenabled) |
void | setAcceptTouchEvents(boolenabled) |
void | setAcceptedMouseButtons(Qt::MouseButtons按钮) |
void | setActive(boolactive) |
void | setBoundingRegionGranularity(qreal粒度) |
void (QGraphicsItem::CacheMode mode | setCacheMode(QGraphicsItem::CacheModemode, const QSize&logicalCacheSize= QSize()) |
void | setCursor(const QCursor&cursor) |
void | setData(intkey, const QVariant&value) |
void | setEnabled(boolenabled) |
void | setFiltersChildEvents(boolenabled) |
void | setFlag(QGraphicsItem::GraphicsItemFlagflag, boolenabled= true) |
void | setFlags(QGraphicsItem::GraphicsItemFlagsflags) |
void | setFocus(Qt::FocusReasonfocusReason= Qt::OtherFocusReason) |
void | setFocusProxy(QGraphicsItem*项目) |
void | setGraphicsEffect(QGraphicsEffect*effect) |
void | setGroup(QGraphicsItemGroup*group) |
void | setInputMethodHints(Qt::InputMethodHintshints) |
void (Qt::InputMethodHints) | setOpacity(qrealopacity) |
void | setPanelModality(QGraphicsItem::PanelModality面板模式) |
void | setParentItem(QGraphicsItem*newParent) |
void | setPos(const QPointF&pos) |
void | setPos(qrealx, qrealy) |
void | setRotation(qrealangle) |
void | setScale(qreal因子) |
void | setSelected(boolselected) |
void | setToolTip(const QString&toolTip) |
void | setTransform(const QTransform&matrix, boolcombine= false) |
void | setTransformOriginPoint(const QPointF&origin) |
void | setTransformOriginPoint(qrealx, qrealy) |
void | setTransformations(const QList<QGraphicsTransform *>&transformations) |
void | setVisible(boolvisible) |
void | setX(qrealx) |
void | setY(qrealy) |
void | setZValue(qrealz) |
虚拟 QPainterPath | shape()常量 |
void | show() |
void | stackBefore(const QGraphicsItem*sibling) |
QGraphicsObject * | toGraphicsObject() |
常量 QGraphicsObject * | toGraphicsObject()常量 |
QString | toolTip()常量 |
QGraphicsItem * () | topLevelItem常量 |
QGraphicsWidget * ( | topLevelWidget()常量 |
QTransform | transform()常量 |
QPointF | transformOriginPoint常数 |
QList<QGraphicsTransform *> | transformations()常量 |
虚拟 int | type()常量 |
void | ungrabKeyboard() |
void | ungrabMouse() |
void | unsetCursor() |
void | update(const QRectF&rect= QRectF()) |
void | update(qrealx, qrealy, qrealwidth, qrealheight) |
QGraphicsWidget * | window()常量 |
qreal | x()常量 |
qreal | y()常量 |
常量 | zValue() 常量 |
受保护函数
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 | prepareGeometryChange() |
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 是图形视图框架的一部分。
为方便起见,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 则将其用于剔除不可见的项目,以及在绘制重叠项目时确定需要重新组合的区域。此外,QGraphicsItem 的碰撞检测机制使用boundingRect() 提供有效的截断。collidesWithItem() 中的细粒度碰撞算法基于调用shape() ,该算法会将项目形状的精确轮廓作为QPainterPath 返回。
QGraphicsScene 除非得到通知,否则所有项目 () 和 () 都将保持不变。如果要以任何方式更改项目的几何形状,必须首先调用 () 以允许 更新其簿记。boundingRect shape prepareGeometryChange QGraphicsScene
碰撞检测有两种方法:
- 重新实现shape() 以返回项目的精确形状,然后依靠collidesWithItem() 的默认实现来进行形状-形状相交。如果形状比较复杂,这种方法的成本会很高。
- 请重新实现collidesWithItem() 以提供您自己的自定义项目和形状碰撞算法。
可以调用contains() 函数来确定项目是否包含点。该函数也可以由项目重新实现。contains() 的默认行为基于调用shape() 。
项可以包含其他项,也可以被其他项包含。所有项目都可以有一个父项目和一个子项目列表。除非项目没有父项,否则它的位置就是父项坐标(即父项的本地坐标)。父项会将其位置和变换传播给所有子项。
变换
QGraphicsItem 除了其基本位置pos() 外,还支持投影变换。有几种方法可以改变项的变换。对于简单的变换,您可以调用方便函数setRotation() 或setScale() ,也可以向setTransform() 传递任何变换矩阵。对于高级变换控制,您还可以通过调用setTransformations() 来设置多个组合变换。
项目变换会从父项累加到子项,因此如果父项和子项都旋转 90 度,子项的总变换将是 180 度。同样,如果项目的父项被缩放为原始大小的 2 倍,那么其子项的大小也将是原始大小的 2 倍。项目的变换不会影响其自身的本地几何体;所有几何体函数(如contains(),update() 和所有映射函数)仍在本地坐标中运行。为方便起见,QGraphicsItem 提供了sceneTransform() 和scenePos() 两个函数,前者返回项目的总变换矩阵(包括其位置和所有父项目的位置和变换),后者返回其在场景坐标中的位置。要重置项的矩阵,请调用resetTransform() 。
某些变换操作会根据应用的顺序产生不同的结果。例如,如果先缩放变换,再旋转变换,得到的结果可能与先旋转变换得到的结果不同。但是,在 QGraphicsItem 上设置变换属性的顺序并不会影响最终的变换结果;QGraphicsItem 总是以固定的、已定义的顺序应用这些属性:
- 应用项目的基本变换 (transform())
- 按顺序应用项目的变换列表 (transformations())
- 项目相对于其变换原点进行旋转 (rotation(),transformOriginPoint())
- 项目相对于其变换原点进行缩放 (scale(),transformOriginPoint())
绘制
QGraphicsView 调用paint() 函数来绘制项目的内容。项目本身没有背景或默认填充;项目后面的任何内容都会照亮所有未在此函数中明确绘制的区域。您可以调用update() 来安排一次重新绘制,也可以选择传递需要重新绘制的矩形。根据项目在视图中是否可见,项目可能会也可能不会被重新绘制;在 QGraphicsItem 中没有与QWidget::repaint() 相对应的函数。
项目由视图绘制,从父项目开始,然后按升序堆叠绘制子项目。您可以通过调用setZValue() 来设置项目的堆叠顺序,也可以通过调用zValue() 来测试堆叠顺序,在这种情况下,Z 值低的项目会在 Z 值高的项目之前绘制。堆叠顺序适用于同级项目;父项目总是先于子项目绘制。
排序
所有项目都是按照定义好的稳定顺序绘制的,当您点击场景时,这个顺序也决定了哪些项目会首先接收鼠标输入。通常情况下,您不必担心排序问题,因为项目是按照场景的逻辑结构 "自然排序 "的。
项目的子项堆叠在父项之上,而同级项目则按插入顺序(即与添加到场景或添加到同一父项的顺序相同)堆叠。如果先添加项目 A,然后再添加 B,那么 B 将位于 A 的顶部。
本示例显示了拖放机器人示例中机器人所有肢体的堆叠顺序。躯干是根项目(所有其他项目都是躯干的子项或子孙项),因此首先绘制躯干。接着绘制头部,因为它是躯干子项列表中的第一个子项。然后绘制左上臂。由于下臂是上臂的子代,因此下臂随后绘制,接着绘制上臂的下一个子代,即右上臂,以此类推。
对于高级用户,有一些方法可以改变项目的排序方式:
- 你可以在一个项目上调用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, 以及图形视图框架。
成员类型文档
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 本身的函数时要小心,因为某些函数调用会导致不必要的递归。例如,不能在itemChange() 中调用关于 ItemPositionChange 通知的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() 的结果),则会发送此通知。值参数是新矩阵(即QTransform );要获取旧矩阵,请调用transform() 。在发送此通知时,请勿调用setTransform() 或在itemChange() 中设置任何变换属性;相反,您可以从itemChange() 返回新矩阵。如果更改了变换属性,则不会发送此通知。 |
QGraphicsItem::ItemTransformHasChanged | 10 | 由于调用了setTransform 或更改了其中一个变换属性,项目的变换矩阵发生了变化。如果启用了ItemSendsGeometryChanges 标志,且项目的本地变换矩阵已更改,则会发送此通知。值参数是新矩阵(与transform() 相同),QGraphicsItem 会忽略此通知的返回值(即只读通知)。 |
QGraphicsItem::ItemRotationChange | 28 | 项目的旋转属性已更改。如果启用了ItemSendsGeometryChanges 标志,且项目的旋转属性发生变化(即调用setRotation() 的结果),则会发送此通知。值参数是新的旋转属性(即 double);要获取旧的旋转属性,请调用rotation()。请不要在itemChange() 中调用setRotation() ,因为该通知已发送;相反,您可以从itemChange() 返回新的旋转。 |
QGraphicsItem::ItemRotationHasChanged | 29 | 项目的旋转属性已更改。如果启用了ItemSendsGeometryChanges 标志,且项目的旋转属性已更改,则会发送此通知。值参数是新的旋转(即 double),QGraphicsItem 会忽略此通知的返回值(即只读通知)。请不要在itemChange() 中调用setRotation() ,因为该通知已发送。 |
QGraphicsItem::ItemScaleChange | 30 | 项目的缩放属性发生变化。如果启用了ItemSendsGeometryChanges 标志,并且项目的比例属性发生变化(即调用setScale() 的结果),则会发送此通知。值参数是新的缩放比例(即 double);要获取旧的缩放比例,请调用scale()。请不要在itemChange() 中调用setScale() ,因为该通知已发送;相反,您可以从itemChange() 返回新刻度。 |
QGraphicsItem::ItemScaleHasChanged | 31 | 项目的刻度属性已更改。如果启用了ItemSendsGeometryChanges 标志,并且项目的缩放比例属性已更改,则会发送此通知。值参数是新刻度(即 double),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 值(即 double)。在发送此通知时,请不要在itemChange() 中调用setZValue() 。相反,您可以从itemChange() 返回一个新的 Z 值。 |
QGraphicsItem::ItemZValueHasChanged | 24 | 项目的 Z 值已更改。值参数是新的 Z 值(即 double)。在发送此通知时,请不要调用setZValue() 。返回值将被忽略。 |
QGraphicsItem::ItemOpacityChange | 25 | 项目的不透明度发生变化。值参数是新的不透明度(即一个 double)。在发送此通知时,请勿在itemChange() 中调用setOpacity()。相反,您可以从itemChange() 返回新的不透明度。 |
QGraphicsItem::ItemOpacityHasChanged | 26 | 项目的不透明度已更改。值参数是新的不透明度(即 double)。在发送此通知时,请不要调用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 | 项目使用QStyleOptionGraphicsItem 中的exposedRect 。默认情况下,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> 的类型定义。它存储了 GraphicsItemFlag 值的 OR 组合。
enum QGraphicsItem::PanelModality
该枚举指定模式面板的行为。模式面板会阻止其他面板的输入。请注意,模态面板的子项目不会被阻止。
其值为
常量 | 值 | 说明 |
---|---|---|
QGraphicsItem::NonModal | 0 | 面板不是模态的,不会阻止其他面板的输入。这是面板的默认值。 |
QGraphicsItem::PanelModal | 1 | 面板对单个项目层次结构是模态的,会阻止对其父窗格、所有祖面板以及父面板和祖面板的所有同级面板的输入。 |
QGraphicsItem::SceneModal | 2 | 窗口对整个场景都是模态的,并阻止对所有面板的输入。 |
另请参阅 QGraphicsItem::setPanelModality(),QGraphicsItem::panelModality() 和QGraphicsItem::ItemIsPanel 。
enum QGraphicsItem::anonymous
Qt 中标准图形项类中虚拟type() 函数返回的值。Qt 中的所有此类标准图形项类都与唯一的 Type 值相关联,例如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; } ... }; |
成员函数文档
[explicit]
QGraphicsItem::QGraphicsItem(QGraphicsItem *parent = nullptr)
用给定的parent 项目构造一个 QGraphicsItem。它不会修改QObject::parent() 返回的父对象。
如果parent 是nullptr
,您可以通过调用QGraphicsScene::addItem() 将该项目添加到场景中。该项目将成为顶层项目。
另请参阅 QGraphicsScene::addItem() 和setParentItem()。
[virtual noexcept]
QGraphicsItem::~QGraphicsItem()
销毁QGraphicsItem 及其所有子项。如果该项目当前与一个场景相关联,则该项目将在删除前从场景中移除。
注意: 先从QGraphicsScene 中删除项目,然后再销毁项目会更有效率。
bool QGraphicsItem::acceptDrops() const
如果该项目可以接受拖放事件,则返回true
;否则返回false
。默认情况下,项目不接受拖放事件;项目对拖放是透明的。
另请参阅 setAcceptDrops() 。
bool QGraphicsItem::acceptHoverEvents() const
如果项目接受悬停事件,则返回true
(QGraphicsSceneHoverEvent);否则,返回false
。默认情况下,项目不接受悬停事件。
另请参阅 setAcceptHoverEvents() 和setAcceptedMouseButtons() 。
bool QGraphicsItem::acceptTouchEvents() const
如果项目接受touch events ,则返回true
;否则,返回false
。默认情况下,项目不接受触摸事件。
另请参阅 setAcceptTouchEvents().
Qt::MouseButtons QGraphicsItem::acceptedMouseButtons() const
返回此项目接受鼠标事件的鼠标按钮。默认情况下,接受所有鼠标按钮。
如果一个项目接受了一个鼠标按钮,那么当该鼠标按钮的鼠标按下事件发生时,它将成为鼠标抓取项目。但是,如果项目不接受按钮,QGraphicsScene 将把鼠标事件转发给其下方第一个接受按钮的项目。
另请参阅 setAcceptedMouseButtons() 和mousePressEvent()。
[virtual]
void QGraphicsItem::advance(int phase)
QGraphicsScene::advance() 槽会对所有项目调用两次这个虚拟函数。在第一阶段,所有项目在phase == 0 时被调用,表示场景中的项目即将前进,然后所有项目在phase == 1 时被调用。如果您需要简单的场景控制动画,可以重新实现此函数来更新您的项目。
默认实现什么也不做。
此函数用于动画。另一种方法是多重继承QObject 和QGraphicsItem 并使用动画框架。
另请参见 QGraphicsScene::advance() 和QTimeLine 。
[pure virtual]
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() 和Sorting 。
QRectF QGraphicsItem::childrenBoundingRect() const
以本地坐标返回此条目后代(即其子代、子代的子代等)的边界矩形。该矩形将包含映射到本地坐标后的所有子项。如果项目没有子代,该函数将返回一个空的QRectF 。
这不包括此项目自身的边界矩形;它只返回其子项累积的边界矩形。如果需要包含该项的边界矩形,可以使用 QRectF::operator|() 在 childrenBoundingRect() 中添加boundingRect()。
此函数的复杂度是线性的;它通过遍历所有子代来确定返回的边界矩形的大小。
另请参阅 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
。
mode 应用于other ,然后将得到的形状或边界矩形与此项目的形状进行比较。mode 的默认值是Qt::IntersectsItemShape ;如果other 与此条目形状相交、包含或被此条目形状所包含,则会与此条目相撞(详情请参见Qt::ItemSelectionMode )。
默认实现基于形状相交,并在两个项目上调用shape() 。当形状复杂时,任意形状相交的复杂度会以数量级增长,因此这种操作会非常耗时。您可以在QGraphicsItem 的子类中重新实现该函数,以提供自定义算法。这样,您就可以利用物品形状中的自然约束条件来提高碰撞检测的性能。例如,通过比较两个未变形的完美圆形物品的位置和半径,可以非常高效地确定它们的碰撞。
请注意,在重新实现此函数并在other 上调用shape() 或boundingRect() 时,必须将返回的坐标映射到此项目的坐标系,然后才能进行任何相交。
[virtual]
bool QGraphicsItem::collidesWithPath(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const
如果该项目与path 相撞,则返回true
。
碰撞由mode 决定。mode 的默认值是Qt::IntersectsItemShape ;如果path 与此项目的形状相交、包含或被此项目的形状所包含,则会与此项目发生碰撞。
请注意,此函数检查的是项目的形状或边界矩形(取决于mode )是否包含在path 中,而不是path 是否包含在项目的形状或边界矩形中。
另请参阅 collidesWithItem()、contains() 和shape()。
QList<QGraphicsItem *> QGraphicsItem::collidingItems(Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const
返回与此条目发生碰撞的所有条目列表。
检测碰撞的方式是通过将mode 应用于与此条目进行比较的条目来确定的,也就是说,每个条目的形状或边界矩形都要与此条目形状进行对照检查。mode 的默认值是Qt::IntersectsItemShape 。
另请参见 collidesWithItem()。
QGraphicsItem *QGraphicsItem::commonAncestorItem(const QGraphicsItem *other) const
返回此条目与other 最接近的共同祖先条目,如果other 是nullptr
,或者没有共同祖先,则返回nullptr
。
另请参阅 isAncestorOf()。
[virtual]
bool QGraphicsItem::contains(const QPointF &point) const
如果该项目包含point ,则返回true
,该项目位于本地坐标中;否则,返回 false。QGraphicsView 最常调用该函数来确定光标下的项目,因此该函数的实现应尽可能轻量级。
默认情况下,该函数调用shape(),但您可以在子类中重新实现该函数,以提供一种(也许更有效的)实现方式。
另请参见 shape()、boundingRect() 和collidesWithPath()。
[virtual protected]
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
返回项目的当前光标形状。当鼠标在该项目上移动时,光标将呈现这种形状。有关一系列有用的形状,请参阅list of predefined cursor objects 。
编辑器项目可能需要使用工字形光标:
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()。
[virtual protected]
void QGraphicsItem::dragEnterEvent(QGraphicsSceneDragDropEvent *event)
event 的事件处理程序,可以重新实现,以接收此项目的拖动输入事件。当光标进入项目区域时会产生拖入事件。
通过接受该事件(即调用QEvent::accept() ),除了接收拖动移动和拖动离开事件外,该项目还将接受下拉事件。否则,事件将被忽略并传播到下方的项目。如果事件被接受,项目将在控制返回事件循环之前接收拖动移动事件。
dragEnterEvent 的常见实现是接受或忽略event ,具体取决于event 中的相关 mime 数据。举例说明:
CustomItem::CustomItem() { setAcceptDrops(true); ... } void CustomItem::dragEnterEvent(QGraphicsSceneDragDropEvent *event) { event->setAccepted(event->mimeData()->hasFormat("text/plain")); }
默认情况下,项目不会接收拖放事件;要启用此功能,请调用setAcceptDrops(true)
。
默认实现不做任何操作。
另请参阅 dropEvent()、dragMoveEvent() 和dragLeaveEvent()。
[virtual protected]
void QGraphicsItem::dragLeaveEvent(QGraphicsSceneDragDropEvent *event)
此事件处理程序适用于event 事件,可重新实现以接收此项目的拖动离开事件。当光标离开项目区域时会产生拖动离开事件。大多数情况下,您不需要重新实现此函数,但它在重置项目状态(如高亮)时非常有用。
在event 上调用QEvent::ignore() 或QEvent::accept() 没有任何作用。
默认情况下,项目不会接收拖放事件;要启用此功能,请调用setAcceptDrops(true)
。
默认情况下什么也不做。
另请参阅 dragEnterEvent()、dropEvent() 和dragMoveEvent()。
[virtual protected]
void QGraphicsItem::dragMoveEvent(QGraphicsSceneDragDropEvent *event)
event 的事件处理程序,可以重新实现,以接收此项目的拖动移动事件。光标在项目区域内移动时会产生拖动事件。通常情况下,您不需要重新实现此函数;它用于指示只有部分项目可以接受拖放。
在event 上调用QEvent::ignore() 或QEvent::accept() 可以切换项目是否接受事件位置上的空投。默认情况下,event ,表示项目允许在指定位置拖放。
默认情况下,项目不会接收拖放事件;要启用此功能,请调用setAcceptDrops(true)
。
默认实现不做任何操作。
另请参阅 dropEvent()、dragEnterEvent() 和dragLeaveEvent()。
[virtual protected]
void QGraphicsItem::dropEvent(QGraphicsSceneDragDropEvent *event)
此事件处理程序用于事件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 x, qreal y, qreal w, qreal h, int xmargin = 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 ,则项目可以接受输入焦点。
默认情况下,不启用任何标志。
[virtual protected]
void QGraphicsItem::focusInEvent(QFocusEvent *event)
该事件处理程序适用于event 事件,可以重新实现以接收该项目的焦点事件。默认实现调用ensureVisible()。
另请参阅 focusOutEvent(),sceneEvent() 和setFocus()。
QGraphicsItem *QGraphicsItem::focusItem() const
如果此条目、其子条目或子代条目当前有输入焦点,此函数将返回指向该条目的指针。如果没有后代拥有输入焦点,则返回nullptr
。
另请参阅 hasFocus()、setFocus() 和QWidget::focusWidget()。
[virtual protected]
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 会在项目获得输入焦点时抓取键盘,并在项目失去输入焦点或项目隐藏时释放键盘。
请注意,只有可见项目才能抓取键盘输入。在不可见的项目上调用 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
如果该项目处于活动状态,并且它或其focus proxy 具有键盘输入焦点,则返回true
;否则,返回false
。
另请参阅 focusItem()、setFocus()、QGraphicsScene::setFocusItem() 和isActive() 。
void QGraphicsItem::hide()
隐藏项目(项目默认为可见)。
该便捷函数等同于调用setVisible(false)
。
另请参阅 show() 和setVisible()。
[virtual protected]
void QGraphicsItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
该事件处理程序适用于event 事件,可以重新实现以接收该项目的悬停输入事件。默认实现调用update() ;否则什么也不做。
在event 上调用QEvent::ignore() 或QEvent::accept() 没有任何作用。
另请参阅 hoverMoveEvent()、hoverLeaveEvent()、sceneEvent() 和setAcceptHoverEvents()。
[virtual protected]
void QGraphicsItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
该事件处理程序适用于event 事件,可重新实现以接收此项目的悬停离开事件。默认实现调用update() ;否则什么也不做。
在event 上调用QEvent::ignore() 或QEvent::accept() 没有任何作用。
另请参阅 hoverEnterEvent()、hoverMoveEvent()、sceneEvent() 和setAcceptHoverEvents()。
[virtual protected]
void QGraphicsItem::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
该事件处理程序适用于event 事件,可以重新实现以接收此项目的移动悬停事件。默认实现不执行任何操作。
在event 上调用QEvent::ignore() 或QEvent::accept() 没有任何作用。
另请参阅 hoverEnterEvent()、hoverLeaveEvent()、sceneEvent() 和setAcceptHoverEvents()。
[virtual protected]
void QGraphicsItem::inputMethodEvent(QInputMethodEvent *event)
event 的事件处理程序,可以重新实现,以接收此项目的输入法事件。默认实现会忽略该事件。
另请参阅 inputMethodQuery() 和sceneEvent()。
Qt::InputMethodHints QGraphicsItem::inputMethodHints() const
返回此条目当前的输入法提示。
输入法提示只与输入项目相关。输入法使用提示来指示其应如何操作。例如,如果设置了 Qt::ImhNumbersOnly 标志,输入法可能会改变其可视化组件,以反映只能输入数字。
不同的输入法实现可能会产生不同的效果。
另请参阅 setInputMethodHints() 和inputMethodQuery()。
[virtual protected]
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)) 。
[virtual]
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
如果该项目是一个部件,则返回true
(即QGraphicsWidget );否则,返回false
。
bool QGraphicsItem::isWindow() const
如果项目是QGraphicsWidget 窗口,则返回true
,否则返回 false。
另请参阅 QGraphicsWidget::windowFlags().
[virtual protected]
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 不是空值,并且没有这样的变换,则ok 指向的布尔值将被设置为 false;否则将被设置为 true。
此变换可替代mapToItem() 或mapFromItem() 函数,通过返回适当的变换,您可以自行映射形状和坐标。在重复映射相同的两个项目时,它还能帮助您编写更高效的代码。
注: 在极少数情况下,两个项目之间不存在映射变换。
另请参阅 mapToItem()、mapFromItem() 和deviceTransform()。
[virtual protected]
void QGraphicsItem::keyPressEvent(QKeyEvent *event)
该事件处理程序适用于event 事件,可重新实现以接收该项目的按键事件。默认实现会忽略该事件。如果重新执行此处理程序,默认情况下将接受该事件。
请注意,只有设置了ItemIsFocusable 标志且具有键盘输入焦点的项目才会接收按键事件。
另请参阅 keyReleaseEvent()、setFocus()、QGraphicsScene::setFocusItem() 和sceneEvent()。
[virtual protected]
void QGraphicsItem::keyReleaseEvent(QKeyEvent *event)
该事件处理程序适用于event 事件,可以重新实现以接收此项目的按键释放事件。默认实现会忽略该事件。如果重新执行此处理程序,默认情况下将接受该事件。
请注意,只有设置了ItemIsFocusable 标志且具有键盘输入焦点的项目才会接收按键事件。
另请参阅 keyPressEvent()、setFocus()、QGraphicsScene::setFocusItem() 和sceneEvent()。
QPainterPath QGraphicsItem::mapFromItem(const QGraphicsItem *item, const QPainterPath &path) const
将item 坐标系中的路径path 映射到该项目的坐标系,并返回映射后的路径。
如果item 是nullptr
,则此函数的返回值与mapFromScene() 相同。
另请参阅 itemTransform()、mapFromParent()、mapFromScene()、mapToItem() 和图形视图坐标系。
QPointF QGraphicsItem::mapFromItem(const QGraphicsItem *item, const QPointF &point) const
将item 坐标系中的点point 映射到该项的坐标系中,并返回映射后的坐标。
如果item 是nullptr
,则此函数的返回值与mapFromScene() 相同。
另请参阅 itemTransform()、mapFromParent()、mapFromScene()、transform()、mapToItem() 和图形视图坐标系。
QPolygonF QGraphicsItem::mapFromItem(const QGraphicsItem *item, const QPolygonF &polygon) const
将item 坐标系中的多边形polygon 映射到该项的坐标系中,并返回映射后的多边形。
如果item 是nullptr
,则此函数的返回值与mapFromScene() 相同。
另请参阅 itemTransform()、mapToItem()、mapFromParent()、transform() 和图形视图坐标系。
QPolygonF QGraphicsItem::mapFromItem(const QGraphicsItem *item, const QRectF &rect) const
将item 坐标系中的矩形rect 映射到此项目的坐标系中,并将映射后的矩形作为多边形返回。
如果item 是nullptr
,则此函数的返回值与mapFromScene() 相同。
另请参阅 itemTransform()、mapToItem()、mapFromParent()、transform() 和图形视图坐标系。
QPolygonF QGraphicsItem::mapFromItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const
此方便函数等同于调用 mapFromItem(item,QRectF(x,y,w,h)) 。
QPointF QGraphicsItem::mapFromItem(const QGraphicsItem *item, qreal x, qreal y) const
这是一个重载函数。
该方便函数等同于调用 mapFromItem(item,QPointF(x,y)) 。
QPainterPath QGraphicsItem::mapFromParent(const QPainterPath &path) const
将此项目父坐标系中的路径path 映射到此项目的坐标系,并返回映射后的路径。
另请参阅 mapFromScene()、mapFromItem()、mapToParent() 和图形视图坐标系。
QPointF QGraphicsItem::mapFromParent(const QPointF &point) const
将位于此项目父坐标系中的点point 映射到此项目的坐标系中,并返回映射后的坐标。
另请参阅 mapFromItem()、mapFromScene()、transform()、mapToParent() 和图形视图坐标系。
QPolygonF QGraphicsItem::mapFromParent(const QPolygonF &polygon) const
将此项目父坐标系中的多边形polygon 映射到此项目的坐标系,并返回映射后的多边形。
另请参阅 mapToParent()、mapToItem()、transform() 和图形视图坐标系。
QPolygonF QGraphicsItem::mapFromParent(const QRectF &rect) const
将此项目父坐标系中的矩形rect 映射到此项目的坐标系中,并将映射后的矩形作为多边形返回。
另请参阅 mapToParent()、mapFromItem()、transform() 和图形视图坐标系。
QPolygonF QGraphicsItem::mapFromParent(qreal x, qreal y, qreal w, qreal h) const
该方便函数等同于调用mapFromItem(QRectF(x,y,w,h)) 。
QPointF QGraphicsItem::mapFromParent(qreal x, qreal y) const
这是一个重载函数。
该方便函数等同于调用 mapFromParent(QPointF(x,y)) 。
QPainterPath QGraphicsItem::mapFromScene(const QPainterPath &path) const
将此项目场景坐标系中的路径path 映射到此项目坐标系中,并返回映射后的路径。
另请参阅 mapFromParent()、mapFromItem()、mapToScene() 和图形视图坐标系。
QPointF QGraphicsItem::mapFromScene(const QPointF &point) const
将此项目场景坐标系中的点point 映射到此项目坐标系中,并返回映射后的坐标。
另请参阅 mapFromItem()、mapFromParent()、transform()、mapToScene() 和图形视图坐标系。
QPolygonF QGraphicsItem::mapFromScene(const QPolygonF &polygon) const
将此项目场景坐标系中的多边形polygon 映射到此项目坐标系中,并返回映射后的多边形。
另请参阅 mapToScene()、mapFromParent()、transform() 和图形视图坐标系。
QPolygonF QGraphicsItem::mapFromScene(const QRectF &rect) const
将此项目的场景坐标系中的矩形rect 映射到此项目的坐标系中,并将映射后的矩形作为多边形返回。
另请参阅 mapToScene()、mapFromItem()、transform() 和图形视图坐标系。
QPolygonF QGraphicsItem::mapFromScene(qreal x, qreal y, qreal w, qreal h) const
此方便函数等同于调用 mapFromScene(QRectF(x,y,w,h)) 。
QPointF QGraphicsItem::mapFromScene(qreal x, qreal y) const
这是一个重载函数。
该便捷函数等同于调用 mapFromScene(QPointF(x,y)) 。
QRectF QGraphicsItem::mapRectFromItem(const QGraphicsItem *item, const QRectF &rect) const
将item 的坐标系中的矩形rect 映射到该项的坐标系中,并将映射后的矩形作为新矩形(即所得多边形的边界矩形)返回。
如果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)) 。
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, const QPointF &point) const
将本项目坐标系中的点point 映射到item 的坐标系,并返回映射后的坐标。
如果item 是nullptr
,则此函数的返回值与mapToScene() 相同。
另请参阅 itemTransform()、mapToParent()、mapToScene()、transform()、mapFromItem() 和图形视图坐标系。
QPolygonF QGraphicsItem::mapToItem(const QGraphicsItem *item, const QPolygonF &polygon) const
将此项目坐标系中的多边形polygon 映射到item 的坐标系,并返回映射后的多边形。
如果item 是nullptr
,则此函数的返回值与mapToScene() 相同。
另请参阅 itemTransform()、mapToParent()、mapToScene()、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, qreal x, qreal y, qreal w, qreal h) const
此方便函数等同于调用 mapToItem(item,QRectF(x,y,w,h)) 。
QPointF QGraphicsItem::mapToItem(const QGraphicsItem *item, qreal x, qreal y) const
这是一个重载函数。
该方便函数等同于调用 mapToItem(item,QPointF(x,y)) 。
QPainterPath QGraphicsItem::mapToParent(const QPainterPath &path) const
将该项目坐标系中的路径path 映射到其父项目的坐标系,并返回映射后的路径。如果项目没有父节点,path 将映射到场景的坐标系。
另请参阅 mapToScene()、mapToItem()、mapFromParent() 和图形视图坐标系。
QPointF QGraphicsItem::mapToParent(const QPointF &point) const
将该项目坐标系中的点point 映射到其父级坐标系,并返回映射后的坐标。如果项目没有父坐标系,point 将映射到场景坐标系。
另请参阅 mapToItem()、mapToScene()、transform()、mapFromParent() 和图形视图坐标系。
QPolygonF QGraphicsItem::mapToParent(const QPolygonF &polygon) const
将此项目坐标系中的多边形polygon 映射到其父项目坐标系,并返回映射后的多边形。如果项目没有父对象,polygon 将映射到场景的坐标系。
另请参阅 mapToScene()、mapToItem()、mapFromParent() 和图形视图坐标系。
QPolygonF QGraphicsItem::mapToParent(const QRectF &rect) const
将此项目坐标系中的矩形rect 映射到其父项目的坐标系,并将映射后的矩形作为多边形返回。如果项目没有父对象,rect 将映射到场景的坐标系。
另请参阅 mapToScene()、mapToItem()、mapFromParent() 和图形视图坐标系。
QPolygonF QGraphicsItem::mapToParent(qreal x, qreal y, qreal w, qreal h) const
该方便函数等同于调用 mapToParent(QRectF(x,y,w,h)) 。
QPointF QGraphicsItem::mapToParent(qreal x, qreal y) const
这是一个重载函数。
该方便函数等同于调用 mapToParent(QPointF(x,y)) 。
QPainterPath QGraphicsItem::mapToScene(const QPainterPath &path) const
将本项目坐标系中的路径path 映射到场景坐标系,并返回映射后的路径。
另请参阅 mapToParent()、mapToItem()、mapFromScene() 和图形视图坐标系。
QPointF QGraphicsItem::mapToScene(const QPointF &point) const
将本项坐标系中的点point 映射到场景坐标系,并返回映射后的坐标。
另请参阅 mapToItem()、mapToParent()、transform()、mapFromScene() 和图形视图坐标系。
QPolygonF QGraphicsItem::mapToScene(const QPolygonF &polygon) const
将此项目坐标系中的多边形polygon 映射到场景坐标系,并返回映射后的多边形。
另请参阅 mapToParent()、mapToItem()、mapFromScene() 和图形视图坐标系。
QPolygonF QGraphicsItem::mapToScene(const QRectF &rect) const
将本项坐标系中的矩形rect 映射到场景坐标系中,并将映射后的矩形作为多边形返回。
另请参阅 mapToParent()、mapToItem()、mapFromScene() 和图形视图坐标系。
QPolygonF QGraphicsItem::mapToScene(qreal x, qreal y, qreal w, qreal h) const
此方便函数等同于调用 mapToScene(QRectF(x,y,w,h)) 。
QPointF QGraphicsItem::mapToScene(qreal x, qreal y) const
这是一个重载函数。
该便捷函数等同于调用 mapToScene(QPointF(x,y)) 。
[virtual protected]
void QGraphicsItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
该事件处理程序用于事件event ,可以重新实现,以接收该项目的鼠标双击事件。
双击一个项目时,该项目将首先收到一个鼠标按下事件,然后是一个释放事件(即单击),接着是一个双击事件,最后是一个释放事件。
在event 上调用QEvent::ignore() 或QEvent::accept() 没有任何作用。
默认实现调用mousePressEvent() 。如果您想在重新实现此函数时保留基本实现,请在重新实现时调用 QGraphicsItem::mouseDoubleClickEvent()。
请注意,如果一个项目既不是selectable 也不是movable ,它将不会接收双击事件(在这种情况下,单次鼠标点击将被忽略,从而停止产生双击)。
另请参见 mousePressEvent()、mouseMoveEvent()、mouseReleaseEvent() 和sceneEvent()。
[virtual protected]
void QGraphicsItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
event 的事件处理程序,可以重新实现以接收此项目的鼠标移动事件。如果确实收到了该事件,则可以确定该项目也收到了鼠标按下事件,并且该项目是当前的鼠标抓取器。
在event 上调用QEvent::ignore() 或QEvent::accept() 没有任何作用。
默认实现处理基本的项目交互,如选择和移动。如果您想在重新实现此函数时保留基本实现,请在重新实现时调用 QGraphicsItem::mouseMoveEvent()。
请注意,mousePressEvent() 会决定接收鼠标事件的图形项。详情请查看mousePressEvent() 说明。
另请参阅 mousePressEvent()、mouseReleaseEvent()、mouseDoubleClickEvent() 和sceneEvent()。
[virtual protected]
void QGraphicsItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
event 的事件处理程序,可以重新实现,以接收此项目的鼠标按下事件。鼠标按下事件只传递给接受鼠标按键的项目。默认情况下,一个项目接受所有鼠标按键,但你可以通过调用setAcceptedMouseButtons() 来改变这一点。
鼠标按下事件会决定哪个项目应成为鼠标抓取器(请参阅QGraphicsScene::mouseGrabberItem() )。如果不重新执行此函数,按下事件将传播到此项目下的任何最上层项目,并且不会有其他鼠标事件传递到此项目。
如果重新执行此函数,event 默认将被接受(请参阅QEvent::accept()) ,然后此项目将成为鼠标抓取器。这样,该项目就可以接收未来的移动、释放和双击事件。如果在event 上调用QEvent::ignore() ,该项目将失去鼠标抓取权,而event 将传播到下面任何最上面的项目。除非收到新的鼠标按下事件,否则不会再向此项目发送鼠标事件。
默认实现可处理基本的项目交互,如选择和移动。如果您想在重新实现此函数时保留基本实现,请在重新实现时调用 QGraphicsItem::mousePressEvent()。
对于既不是movable 也不是selectable 的项目,事件是QEvent::ignore()d 。
另请参阅 mouseMoveEvent()、mouseReleaseEvent()、mouseDoubleClickEvent() 和sceneEvent()。
[virtual protected]
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 。
[virtual]
QPainterPath QGraphicsItem::opaqueArea() const
此虚拟函数返回一个形状,代表此项目不透明的区域。如果该区域使用不透明笔刷或颜色填充(即不透明),则该区域为不透明区域。
isObscuredBy() 将使用此函数,底层项目调用此函数以确定是否被此项目遮挡。
默认实现返回空QPainterPath ,表示此项目完全透明,不会遮挡任何其他项目。
另请参见 isObscuredBy()、isObscured() 和shape()。
[pure virtual]
void QGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr)
该函数通常由QGraphicsView 调用,以本地坐标绘制项目的内容。
使用painter 在QGraphicsItem 子类中重新实现该函数,以提供项目的绘制实现。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() ,否则项目必须始终以完全相同的方式重绘;否则可能会出现视觉假象。换句话说,对 paint() 的两次后续调用必须始终产生相同的输出,除非在两次调用之间调用了update() 。
注意: 即使没有明确调用update() 也不能保证图形视图框架只调用一次 paint()。详情请参见setCacheMode() 文档。
另请参阅 setCacheMode(),QPen::width(),项目坐标和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
返回指向项目父部件的指针。项目的父 Widget 是最接近 Widget 的父项目。
另请参阅 parentItem() 和childItems()。
QPointF QGraphicsItem::pos() const
返回项目在父节点坐标中的位置。如果项目没有父节点,则以场景坐标显示其位置。
项目的位置描述了其在父坐标中的原点(本地坐标(0, 0));此函数的返回值与mapToParent(0, 0) 相同。
为方便起见,您也可以调用scenePos() 来确定项在场景坐标中的位置,而与父节点无关。
另请参阅 x()、y()、setPos()、transform() 和图形视图坐标系。
[protected]
void QGraphicsItem::prepareGeometryChange()
为项目的几何形状更改做准备。在更改项目的边界矩形之前,请调用此函数,以便更新QGraphicsScene 的索引。
如果有必要,prepareGeometryChange() 将调用update() 。
示例:
void CircleItem::setRadius(qreal newRadius) { if (radius != newRadius) { prepareGeometryChange(); radius = newRadius; } }
另请参阅 boundingRect()。
void QGraphicsItem::removeSceneEventFilter(QGraphicsItem *filterItem)
从filterItem 删除此项目上的事件过滤器。
另请参阅 installSceneEventFilter() 。
void QGraphicsItem::resetTransform()
将此项目的变换矩阵重置为标识矩阵,或将所有变换属性重置为默认值。这相当于调用setTransform(QTransform())
。
另请参阅 setTransform() 和transform()。
qreal QGraphicsItem::rotation() const
返回围绕 Z 轴的顺时针旋转角度,单位为度。默认值为 0(即项目不旋转)。
旋转与项目的scale(),transform() 和transformations() 结合使用,将项目的坐标系映射到父项目。
另请参阅 setRotation(),transformOriginPoint() 和Transformations 。
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() 和图形视图坐标系。
[virtual protected]
bool QGraphicsItem::sceneEvent(QEvent *event)
此虚函数接收指向此项目的事件。重新实现此函数可在事件被发送到专门的事件处理程序contextMenuEvent(),focusInEvent(),focusOutEvent(),hoverEnterEvent(),hoverMoveEvent(),hoverLeaveEvent(),keyPressEvent(),keyReleaseEvent(),mousePressEvent(),mouseReleaseEvent(),mouseMoveEvent(), 和mouseDoubleClickEvent() 之前拦截事件。
如果事件被识别并处理,则返回true
;否则(例如,如果事件类型未被识别),则返回 false。
event 是被拦截的事件。
[virtual protected]
bool QGraphicsItem::sceneEventFilter(QGraphicsItem *watched, QEvent *event)
过滤项目watched 的事件。event 是过滤的事件。
在子类中重新实现该函数后,该项目就可以用作其他项目的事件过滤器,在这些项目做出响应之前拦截发送给它们的所有事件。
重新实现时必须返回 true,以阻止对给定事件的进一步处理,确保该事件不会发送到被监视项;或者返回 false,以表示事件系统应进一步传播该事件。
另请参阅 installSceneEventFilter() 。
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()、图形视图坐标系和Transformations 。
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 为 true,该项目将接受拖放事件;否则,它对拖放事件是透明的。默认情况下,项目不接受拖放事件。
另请参见 acceptDrops()。
void QGraphicsItem::setAcceptHoverEvents(bool enabled)
如果enabled 为 true,该项目将接受悬停事件;否则,将忽略悬停事件。默认情况下,项目不接受悬停事件。
悬停事件会在当前没有鼠标抓取项时发送。当鼠标光标进入项目、在项目内移动以及离开项目时,都会发送悬停事件。悬停事件通常用于在进入项目时突出显示项目,以及在鼠标光标悬停在项目上时跟踪光标(相当于QWidget::mouseTracking )。
父项会先于子项接收悬停输入事件,并在子项之后接收悬停离开事件。不过,如果光标进入子项,父项不会收到悬停离开事件;父项会保持 "悬停 "状态,直到光标离开其区域(包括其子项的区域)。
如果父项目处理子项目事件,那么当光标经过其子项目时,父项目将接收悬停移动、拖动移动和下拉事件,但不会代表其子项目接收悬停进入和悬停离开事件,也不会接收拖动进入和拖动离开事件。
带有窗口装饰的QGraphicsWidget 将接受悬停事件,与acceptHoverEvents() 的值无关。
另请参阅 acceptHoverEvents()、hoverEnterEvent()、hoverMoveEvent() 和hoverLeaveEvent()。
void QGraphicsItem::setAcceptTouchEvents(bool enabled)
如果enabled 为 true,则此项目将接受touch events ;否则将忽略它们。默认情况下,项目不接受触摸事件。
另请参阅 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 视口,这将提供一个像素完美的边界区域)。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() 的大小。对于ItemCoordinateCache 以外的所有其他缓存模式,logicalCacheSize 将被忽略。
如果项目花费大量时间重新绘制,缓存可以加快渲染速度。在某些情况下,缓存也会减慢渲染速度,尤其是当项目的重绘时间少于QGraphicsItem 从缓存中重绘的时间时。
启用缓存后,项目的paint() 函数通常会绘制到屏幕外的像素图缓存中;对于任何后续的重绘请求,图形视图框架都会从缓存中重绘。这种方法在使用 QGLWidget 时效果尤佳,因为 QGLWidget 会将所有缓存存储为 OpenGL 纹理。
请注意,要获得最佳性能,可能需要更改QPixmapCache 的缓存限制。
有关不同缓存模式的更多信息,请参阅CacheMode 文档。
注意: 启用缓存并不意味着只有在明确调用update() 时才会调用项目的paint() 函数。例如,在内存压力下,Qt XML 可能会决定放弃部分缓存信息;在这种情况下,即使没有调用update() 函数,也会调用项目的paint() 函数(也就是说,与未启用缓存完全一样)。
另请参阅 cacheMode()、CacheMode 和QPixmapCache::setCacheLimit()。
void QGraphicsItem::setCursor(const QCursor &cursor)
将项目的当前光标形状设置为cursor 。当鼠标在项目上移动时,光标将呈现这种形状。有关一系列有用的形状,请参阅list of predefined cursor objects 。
编辑器项目可能需要使用工字形光标:
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 为真,则启用项目标志flag ;否则禁用。
void QGraphicsItem::setFlags(QGraphicsItem::GraphicsItemFlags flags)
将项目标志设置为flags 。flags 中的所有标记都将启用;flags 中没有的所有标记都将禁用。
如果项目有焦点,而flags 没有启用ItemIsFocusable ,则调用此函数后项目将失去焦点。同样,如果项目已被选中,而flags 没有启用ItemIsSelectable ,则项目会自动取消选中。
默认情况下,不启用任何标记。(QGraphicsWidget 默认启用ItemSendsGeometryChanges 标志,以跟踪位置变化)。
void QGraphicsItem::setFocus(Qt::FocusReason focusReason = Qt::OtherFocusReason)
将键盘输入焦点指向该项目。focusReason 参数将传入本函数生成的任何focus event 中;它用于解释是什么原因导致该项目获得焦点。
只有设置了ItemIsFocusable 标志的启用项目才能接受键盘焦点。
如果该项目不可见、未激活或未与场景关联,则不会立即获得输入焦点。不过,如果该项目以后变得可见,它将被注册为其子树项目的首选焦点项目。
调用此函数后,该项目将收到一个focus in event ,其中包含focusReason 。如果另一个项目已拥有焦点,则该项目将首先收到一个focus out event ,表明它已失去输入焦点。
另请参阅 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,此项目将成为顶层项目。
请注意,这会将此图形项目隐式添加到父项目的场景中。您不应自行将add 项目添加到场景中。
对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)
设置绕 Z 轴的顺时针旋转angle ,单位为度。默认值为 0(即项目不旋转)。指定负值将使项目逆时针旋转。通常情况下,旋转角度的范围是(-360, 360),但也可以指定该范围以外的值(例如,旋转 370 度等于旋转 10 度)。
项目将围绕其变换原点旋转,默认值为(0,0)。您可以通过调用setTransformOriginPoint() 选择不同的变换原点。
旋转与项目的scale(),transform() 和transformations() 结合使用,将项目的坐标系映射到父项目。
另请参阅 rotation()、setTransformOriginPoint() 和Transformations 。
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()、图形视图坐标系和Transformations 。
void QGraphicsItem::setTransformOriginPoint(const QPointF &origin)
以项目坐标设置变换的origin 点。
另请参阅 transformOriginPoint() 和Transformations 。
void QGraphicsItem::setTransformOriginPoint(qreal x, qreal y)
这是一个重载函数。
以项坐标设置变换的原点。这等同于调用 setTransformOriginPoint(QPointF(x,y)) 。
另请参阅 setTransformOriginPoint() 和Transformations 。
void QGraphicsItem::setTransformations(const QList<QGraphicsTransform *> &transformations)
设置当前适用于该项目的图形transformations (QGraphicsTransform) 列表。
如果只想旋转或缩放项目,则应调用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(),Sorting,stackBefore(), 和ItemStacksBehindParent 。
[virtual]
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 *sibling)
将此条目堆叠在sibling 之前,后者必须是同级条目(即这两个条目必须共享同一个父条目,或者必须都是顶层条目)。sibling 的 Z 值必须与此条目相同,否则调用此函数不会有任何效果。
默认情况下,所有同级项目都按插入顺序堆叠(即添加的第一个项目在下一个项目之前绘制)。如果两个项目的 Z 值不同,则 Z 值最高的项目会被绘制在上面。当 Z 值相同时,插入顺序将决定堆叠顺序。
另请参阅 setZValue(),ItemStacksBehindParent, 和Sorting 。
QGraphicsObject *QGraphicsItem::toGraphicsObject()
如果该类实际上是一个图形对象,则返回转换为QGraphicsObject 的图形项,否则返回 0。
const QGraphicsObject *QGraphicsItem::toGraphicsObject() const
如果该类实际上是一个图形对象,则返回转换为QGraphicsObject 的图形项,否则返回 0。
QString QGraphicsItem::toolTip() const
返回项目的工具提示,如果未设置工具提示,则返回空QString 。
另请参阅 setToolTip() 和QToolTip 。
QGraphicsItem *QGraphicsItem::topLevelItem() const
返回此项目的顶层项目。顶层项目是项目的最顶层祖先项目,其父项目是nullptr
。如果项目没有父项目,则返回其自身的指针(即顶层项目是其自身的顶层项目)。
另请参阅 parentItem() 。
QGraphicsWidget *QGraphicsItem::topLevelWidget() const
返回指向 item 的顶层 widget 的指针(即 item 的祖先,其父代是nullptr
,或其父代不是 widget),如果 item 没有顶层 widget,则返回nullptr
。如果该项目是它自己的顶层 widget,该函数将返回指向项目本身的指针。
QTransform QGraphicsItem::transform() const
返回该项目的变换矩阵。
变换矩阵与项目的rotation()、scale() 和transformations() 结合为项目的组合变换。
默认变换矩阵是一个标识矩阵。
另请参阅 setTransform() 和sceneTransform()。
QPointF QGraphicsItem::transformOriginPoint() const
返回以项目坐标表示的变换原点。
默认值为QPointF(0,0)。
另请参阅 setTransformOriginPoint() 和Transformations 。
QList<QGraphicsTransform *> QGraphicsItem::transformations() const
返回当前适用于该项目的图形变换列表。
QGraphicsTransform 用于在一个项目上应用和控制一连串单独的变换操作。它在动画中特别有用,因为在动画中,每个变换操作都需要独立或以不同的方式进行插值。
变换与项目的rotation(),scale() 和transform() 结合使用,将项目的坐标系映射到父项目。
另请参阅 setTransformations(),scale(),rotation(),transformOriginPoint() 和Transformations 。
[virtual]
int QGraphicsItem::type() const
以 int 形式返回项目的类型。所有标准 graphicsitem 类都与唯一值相关联;请参阅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; } ... };
另请参见 UserType 。
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(),Sorting,stackBefore() 和ItemStacksBehindParent 。
相关非会员
template <typename T> T qgraphicsitem_cast(QGraphicsItem *item)
如果item 是 T 类型,则返回给定的item ,否则返回nullptr
。
注意: 为使此函数能与自定义项正确配合使用,请为每个自定义QGraphicsItem 子类重新实现type() 函数。
另请参阅 QGraphicsItem::type() 和QGraphicsItem::UserType 。
© 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.