File indexing completed on 2026-09-22 09:04:35
0001
0002
0003
0004
0005 #ifndef QGRAPHICSITEM_H
0006 #define QGRAPHICSITEM_H
0007
0008 #include <QtWidgets/qtwidgetsglobal.h>
0009 #include <QtCore/qobject.h>
0010 #include <QtCore/qvariant.h>
0011 #include <QtCore/qrect.h>
0012 #include <QtCore/qscopedpointer.h>
0013 #include <QtGui/qpainterpath.h>
0014 #include <QtGui/qpixmap.h>
0015
0016 class tst_QGraphicsItem;
0017
0018 QT_REQUIRE_CONFIG(graphicsview);
0019
0020 QT_BEGIN_NAMESPACE
0021
0022 class QBrush;
0023 class QCursor;
0024 class QFocusEvent;
0025 class QGraphicsEffect;
0026 class QGraphicsItemGroup;
0027 class QGraphicsObject;
0028 class QGraphicsSceneContextMenuEvent;
0029 class QGraphicsSceneDragDropEvent;
0030 class QGraphicsSceneEvent;
0031 class QGraphicsSceneHoverEvent;
0032 class QGraphicsSceneMouseEvent;
0033 class QGraphicsSceneWheelEvent;
0034 class QGraphicsScene;
0035 class QGraphicsTransform;
0036 class QGraphicsWidget;
0037 class QInputMethodEvent;
0038 class QKeyEvent;
0039 class QMenu;
0040 class QPainter;
0041 class QPen;
0042 class QPointF;
0043 class QRectF;
0044 class QStyleOptionGraphicsItem;
0045
0046 class QGraphicsItemPrivate;
0047 class Q_WIDGETS_EXPORT QGraphicsItem
0048 {
0049 public:
0050 enum GraphicsItemFlag {
0051 ItemIsMovable = 0x1,
0052 ItemIsSelectable = 0x2,
0053 ItemIsFocusable = 0x4,
0054 ItemClipsToShape = 0x8,
0055 ItemClipsChildrenToShape = 0x10,
0056 ItemIgnoresTransformations = 0x20,
0057 ItemIgnoresParentOpacity = 0x40,
0058 ItemDoesntPropagateOpacityToChildren = 0x80,
0059 ItemStacksBehindParent = 0x100,
0060 ItemUsesExtendedStyleOption = 0x200,
0061 ItemHasNoContents = 0x400,
0062 ItemSendsGeometryChanges = 0x800,
0063 ItemAcceptsInputMethod = 0x1000,
0064 ItemNegativeZStacksBehindParent = 0x2000,
0065 ItemIsPanel = 0x4000,
0066 ItemIsFocusScope = 0x8000,
0067 ItemSendsScenePositionChanges = 0x10000,
0068 ItemStopsClickFocusPropagation = 0x20000,
0069 ItemStopsFocusHandling = 0x40000,
0070 ItemContainsChildrenInShape = 0x80000
0071
0072 };
0073 Q_DECLARE_FLAGS(GraphicsItemFlags, GraphicsItemFlag)
0074
0075 enum GraphicsItemChange {
0076 ItemPositionChange,
0077 ItemVisibleChange = 2,
0078 ItemEnabledChange,
0079 ItemSelectedChange,
0080 ItemParentChange,
0081 ItemChildAddedChange,
0082 ItemChildRemovedChange,
0083 ItemTransformChange,
0084 ItemPositionHasChanged,
0085 ItemTransformHasChanged,
0086 ItemSceneChange,
0087 ItemVisibleHasChanged,
0088 ItemEnabledHasChanged,
0089 ItemSelectedHasChanged,
0090 ItemParentHasChanged,
0091 ItemSceneHasChanged,
0092 ItemCursorChange,
0093 ItemCursorHasChanged,
0094 ItemToolTipChange,
0095 ItemToolTipHasChanged,
0096 ItemFlagsChange,
0097 ItemFlagsHaveChanged,
0098 ItemZValueChange,
0099 ItemZValueHasChanged,
0100 ItemOpacityChange,
0101 ItemOpacityHasChanged,
0102 ItemScenePositionHasChanged,
0103 ItemRotationChange,
0104 ItemRotationHasChanged,
0105 ItemScaleChange,
0106 ItemScaleHasChanged,
0107 ItemTransformOriginPointChange,
0108 ItemTransformOriginPointHasChanged
0109 };
0110
0111 enum CacheMode {
0112 NoCache,
0113 ItemCoordinateCache,
0114 DeviceCoordinateCache
0115 };
0116
0117 enum PanelModality
0118 {
0119 NonModal,
0120 PanelModal,
0121 SceneModal
0122 };
0123
0124 explicit QGraphicsItem(QGraphicsItem *parent = nullptr);
0125 virtual ~QGraphicsItem();
0126
0127 QGraphicsScene *scene() const;
0128
0129 QGraphicsItem *parentItem() const;
0130 QGraphicsItem *topLevelItem() const;
0131 QGraphicsObject *parentObject() const;
0132 QGraphicsWidget *parentWidget() const;
0133 QGraphicsWidget *topLevelWidget() const;
0134 QGraphicsWidget *window() const;
0135 QGraphicsItem *panel() const;
0136 void setParentItem(QGraphicsItem *parent);
0137 QList<QGraphicsItem *> childItems() const;
0138 bool isWidget() const;
0139 bool isWindow() const;
0140 bool isPanel() const;
0141
0142 QGraphicsObject *toGraphicsObject();
0143 const QGraphicsObject *toGraphicsObject() const;
0144
0145 QGraphicsItemGroup *group() const;
0146 void setGroup(QGraphicsItemGroup *group);
0147
0148 GraphicsItemFlags flags() const;
0149 void setFlag(GraphicsItemFlag flag, bool enabled = true);
0150 void setFlags(GraphicsItemFlags flags);
0151
0152 CacheMode cacheMode() const;
0153 void setCacheMode(CacheMode mode, const QSize &cacheSize = QSize());
0154
0155 PanelModality panelModality() const;
0156 void setPanelModality(PanelModality panelModality);
0157 bool isBlockedByModalPanel(QGraphicsItem **blockingPanel = nullptr) const;
0158
0159 #if QT_CONFIG(tooltip)
0160 QString toolTip() const;
0161 void setToolTip(const QString &toolTip);
0162 #endif
0163
0164 #ifndef QT_NO_CURSOR
0165 QCursor cursor() const;
0166 void setCursor(const QCursor &cursor);
0167 bool hasCursor() const;
0168 void unsetCursor();
0169 #endif
0170
0171 bool isVisible() const;
0172 bool isVisibleTo(const QGraphicsItem *parent) const;
0173 void setVisible(bool visible);
0174 inline void hide() { setVisible(false); }
0175 inline void show() { setVisible(true); }
0176
0177 bool isEnabled() const;
0178 void setEnabled(bool enabled);
0179
0180 bool isSelected() const;
0181 void setSelected(bool selected);
0182
0183 bool acceptDrops() const;
0184 void setAcceptDrops(bool on);
0185
0186 qreal opacity() const;
0187 qreal effectiveOpacity() const;
0188 void setOpacity(qreal opacity);
0189
0190 #if QT_CONFIG(graphicseffect)
0191
0192 QGraphicsEffect *graphicsEffect() const;
0193 void setGraphicsEffect(QGraphicsEffect *effect);
0194 #endif
0195
0196 Qt::MouseButtons acceptedMouseButtons() const;
0197 void setAcceptedMouseButtons(Qt::MouseButtons buttons);
0198 bool acceptHoverEvents() const;
0199 void setAcceptHoverEvents(bool enabled);
0200 bool acceptTouchEvents() const;
0201 void setAcceptTouchEvents(bool enabled);
0202
0203 bool filtersChildEvents() const;
0204 void setFiltersChildEvents(bool enabled);
0205
0206 bool handlesChildEvents() const;
0207 void setHandlesChildEvents(bool enabled);
0208
0209 bool isActive() const;
0210 void setActive(bool active);
0211
0212 bool hasFocus() const;
0213 void setFocus(Qt::FocusReason focusReason = Qt::OtherFocusReason);
0214 void clearFocus();
0215
0216 QGraphicsItem *focusProxy() const;
0217 void setFocusProxy(QGraphicsItem *item);
0218
0219 QGraphicsItem *focusItem() const;
0220 QGraphicsItem *focusScopeItem() const;
0221
0222 void grabMouse();
0223 void ungrabMouse();
0224 void grabKeyboard();
0225 void ungrabKeyboard();
0226
0227
0228 QPointF pos() const;
0229 inline qreal x() const { return pos().x(); }
0230 void setX(qreal x);
0231 inline qreal y() const { return pos().y(); }
0232 void setY(qreal y);
0233 QPointF scenePos() const;
0234 void setPos(const QPointF &pos);
0235 inline void setPos(qreal x, qreal y);
0236 inline void moveBy(qreal dx, qreal dy) { setPos(pos().x() + dx, pos().y() + dy); }
0237
0238 void ensureVisible(const QRectF &rect = QRectF(), int xmargin = 50, int ymargin = 50);
0239 inline void ensureVisible(qreal x, qreal y, qreal w, qreal h, int xmargin = 50, int ymargin = 50);
0240
0241
0242 QTransform transform() const;
0243 QTransform sceneTransform() const;
0244 QTransform deviceTransform(const QTransform &viewportTransform) const;
0245 QTransform itemTransform(const QGraphicsItem *other, bool *ok = nullptr) const;
0246 void setTransform(const QTransform &matrix, bool combine = false);
0247 void resetTransform();
0248 void setRotation(qreal angle);
0249 qreal rotation() const;
0250
0251 void setScale(qreal scale);
0252 qreal scale() const;
0253
0254 QList<QGraphicsTransform *> transformations() const;
0255 void setTransformations(const QList<QGraphicsTransform *> &transformations);
0256
0257 QPointF transformOriginPoint() const;
0258 void setTransformOriginPoint(const QPointF &origin);
0259 inline void setTransformOriginPoint(qreal ax, qreal ay)
0260 { setTransformOriginPoint(QPointF(ax,ay)); }
0261
0262 virtual void advance(int phase);
0263
0264
0265 qreal zValue() const;
0266 void setZValue(qreal z);
0267 void stackBefore(const QGraphicsItem *sibling);
0268
0269
0270 virtual QRectF boundingRect() const = 0;
0271 QRectF childrenBoundingRect() const;
0272 QRectF sceneBoundingRect() const;
0273 virtual QPainterPath shape() const;
0274 bool isClipped() const;
0275 QPainterPath clipPath() const;
0276 virtual bool contains(const QPointF &point) const;
0277 virtual bool collidesWithItem(const QGraphicsItem *other, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const;
0278 virtual bool collidesWithPath(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const;
0279 QList<QGraphicsItem *> collidingItems(Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const;
0280 bool isObscured(const QRectF &rect = QRectF()) const;
0281 inline bool isObscured(qreal x, qreal y, qreal w, qreal h) const;
0282 virtual bool isObscuredBy(const QGraphicsItem *item) const;
0283 virtual QPainterPath opaqueArea() const;
0284
0285 QRegion boundingRegion(const QTransform &itemToDeviceTransform) const;
0286 qreal boundingRegionGranularity() const;
0287 void setBoundingRegionGranularity(qreal granularity);
0288
0289
0290 virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) = 0;
0291 void update(const QRectF &rect = QRectF());
0292 inline void update(qreal x, qreal y, qreal width, qreal height);
0293 void scroll(qreal dx, qreal dy, const QRectF &rect = QRectF());
0294
0295
0296 QPointF mapToItem(const QGraphicsItem *item, const QPointF &point) const;
0297 QPointF mapToParent(const QPointF &point) const;
0298 QPointF mapToScene(const QPointF &point) const;
0299 QPolygonF mapToItem(const QGraphicsItem *item, const QRectF &rect) const;
0300 QPolygonF mapToParent(const QRectF &rect) const;
0301 QPolygonF mapToScene(const QRectF &rect) const;
0302 QRectF mapRectToItem(const QGraphicsItem *item, const QRectF &rect) const;
0303 QRectF mapRectToParent(const QRectF &rect) const;
0304 QRectF mapRectToScene(const QRectF &rect) const;
0305 QPolygonF mapToItem(const QGraphicsItem *item, const QPolygonF &polygon) const;
0306 QPolygonF mapToParent(const QPolygonF &polygon) const;
0307 QPolygonF mapToScene(const QPolygonF &polygon) const;
0308 QPainterPath mapToItem(const QGraphicsItem *item, const QPainterPath &path) const;
0309 QPainterPath mapToParent(const QPainterPath &path) const;
0310 QPainterPath mapToScene(const QPainterPath &path) const;
0311 QPointF mapFromItem(const QGraphicsItem *item, const QPointF &point) const;
0312 QPointF mapFromParent(const QPointF &point) const;
0313 QPointF mapFromScene(const QPointF &point) const;
0314 QPolygonF mapFromItem(const QGraphicsItem *item, const QRectF &rect) const;
0315 QPolygonF mapFromParent(const QRectF &rect) const;
0316 QPolygonF mapFromScene(const QRectF &rect) const;
0317 QRectF mapRectFromItem(const QGraphicsItem *item, const QRectF &rect) const;
0318 QRectF mapRectFromParent(const QRectF &rect) const;
0319 QRectF mapRectFromScene(const QRectF &rect) const;
0320 QPolygonF mapFromItem(const QGraphicsItem *item, const QPolygonF &polygon) const;
0321 QPolygonF mapFromParent(const QPolygonF &polygon) const;
0322 QPolygonF mapFromScene(const QPolygonF &polygon) const;
0323 QPainterPath mapFromItem(const QGraphicsItem *item, const QPainterPath &path) const;
0324 QPainterPath mapFromParent(const QPainterPath &path) const;
0325 QPainterPath mapFromScene(const QPainterPath &path) const;
0326
0327 inline QPointF mapToItem(const QGraphicsItem *item, qreal x, qreal y) const;
0328 inline QPointF mapToParent(qreal x, qreal y) const;
0329 inline QPointF mapToScene(qreal x, qreal y) const;
0330 inline QPolygonF mapToItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const;
0331 inline QPolygonF mapToParent(qreal x, qreal y, qreal w, qreal h) const;
0332 inline QPolygonF mapToScene(qreal x, qreal y, qreal w, qreal h) const;
0333 inline QRectF mapRectToItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const;
0334 inline QRectF mapRectToParent(qreal x, qreal y, qreal w, qreal h) const;
0335 inline QRectF mapRectToScene(qreal x, qreal y, qreal w, qreal h) const;
0336 inline QPointF mapFromItem(const QGraphicsItem *item, qreal x, qreal y) const;
0337 inline QPointF mapFromParent(qreal x, qreal y) const;
0338 inline QPointF mapFromScene(qreal x, qreal y) const;
0339 inline QPolygonF mapFromItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const;
0340 inline QPolygonF mapFromParent(qreal x, qreal y, qreal w, qreal h) const;
0341 inline QPolygonF mapFromScene(qreal x, qreal y, qreal w, qreal h) const;
0342 inline QRectF mapRectFromItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const;
0343 inline QRectF mapRectFromParent(qreal x, qreal y, qreal w, qreal h) const;
0344 inline QRectF mapRectFromScene(qreal x, qreal y, qreal w, qreal h) const;
0345
0346 bool isAncestorOf(const QGraphicsItem *child) const;
0347 QGraphicsItem *commonAncestorItem(const QGraphicsItem *other) const;
0348 bool isUnderMouse() const;
0349
0350
0351 QVariant data(int key) const;
0352 void setData(int key, const QVariant &value);
0353
0354 Qt::InputMethodHints inputMethodHints() const;
0355 void setInputMethodHints(Qt::InputMethodHints hints);
0356
0357 enum {
0358 Type = 1,
0359 UserType = 65536
0360 };
0361 virtual int type() const;
0362
0363 void installSceneEventFilter(QGraphicsItem *filterItem);
0364 void removeSceneEventFilter(QGraphicsItem *filterItem);
0365
0366 protected:
0367 void updateMicroFocus();
0368 virtual bool sceneEventFilter(QGraphicsItem *watched, QEvent *event);
0369 virtual bool sceneEvent(QEvent *event);
0370 virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
0371 virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event);
0372 virtual void dragLeaveEvent(QGraphicsSceneDragDropEvent *event);
0373 virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event);
0374 virtual void dropEvent(QGraphicsSceneDragDropEvent *event);
0375 virtual void focusInEvent(QFocusEvent *event);
0376 virtual void focusOutEvent(QFocusEvent *event);
0377 virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
0378 virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
0379 virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
0380 virtual void keyPressEvent(QKeyEvent *event);
0381 virtual void keyReleaseEvent(QKeyEvent *event);
0382 virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
0383 virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
0384 virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
0385 virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
0386 virtual void wheelEvent(QGraphicsSceneWheelEvent *event);
0387 virtual void inputMethodEvent(QInputMethodEvent *event);
0388 virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
0389
0390 virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value);
0391
0392 enum Extension {
0393 UserExtension = 0x80000000
0394 };
0395 virtual bool supportsExtension(Extension extension) const;
0396 virtual void setExtension(Extension extension, const QVariant &variant);
0397 virtual QVariant extension(const QVariant &variant) const;
0398
0399 protected:
0400 QGraphicsItem(QGraphicsItemPrivate &dd, QGraphicsItem *parent);
0401 QScopedPointer<QGraphicsItemPrivate> d_ptr;
0402
0403 void addToIndex();
0404 void removeFromIndex();
0405 void prepareGeometryChange();
0406
0407 private:
0408 Q_DISABLE_COPY(QGraphicsItem)
0409 Q_DECLARE_PRIVATE(QGraphicsItem)
0410 friend class QGraphicsItemGroup;
0411 friend class QGraphicsScene;
0412 friend class QGraphicsScenePrivate;
0413 friend class QGraphicsSceneFindItemBspTreeVisitor;
0414 friend class QGraphicsSceneBspTree;
0415 friend class QGraphicsView;
0416 friend class QGraphicsViewPrivate;
0417 friend class QGraphicsObject;
0418 friend class QGraphicsWidget;
0419 friend class QGraphicsWidgetPrivate;
0420 friend class QGraphicsProxyWidgetPrivate;
0421 friend class QGraphicsSceneIndex;
0422 friend class QGraphicsSceneIndexPrivate;
0423 friend class QGraphicsSceneBspTreeIndex;
0424 friend class QGraphicsSceneBspTreeIndexPrivate;
0425 friend class QGraphicsItemEffectSourcePrivate;
0426 friend class QGraphicsTransformPrivate;
0427 #ifndef QT_NO_GESTURES
0428 friend class QGestureManager;
0429 #endif
0430 friend class ::tst_QGraphicsItem;
0431 friend bool qt_closestLeaf(const QGraphicsItem *, const QGraphicsItem *);
0432 friend bool qt_closestItemFirst(const QGraphicsItem *, const QGraphicsItem *);
0433 };
0434
0435 Q_DECLARE_OPERATORS_FOR_FLAGS(QGraphicsItem::GraphicsItemFlags)
0436 #ifndef Q_QDOC
0437 Q_DECLARE_INTERFACE(QGraphicsItem, "org.qt-project.Qt.QGraphicsItem")
0438 #endif
0439
0440 inline void QGraphicsItem::setPos(qreal ax, qreal ay)
0441 { setPos(QPointF(ax, ay)); }
0442 inline void QGraphicsItem::ensureVisible(qreal ax, qreal ay, qreal w, qreal h, int xmargin, int ymargin)
0443 { ensureVisible(QRectF(ax, ay, w, h), xmargin, ymargin); }
0444 inline void QGraphicsItem::update(qreal ax, qreal ay, qreal width, qreal height)
0445 { update(QRectF(ax, ay, width, height)); }
0446 inline bool QGraphicsItem::isObscured(qreal ax, qreal ay, qreal w, qreal h) const
0447 { return isObscured(QRectF(ax, ay, w, h)); }
0448 inline QPointF QGraphicsItem::mapToItem(const QGraphicsItem *item, qreal ax, qreal ay) const
0449 { return mapToItem(item, QPointF(ax, ay)); }
0450 inline QPointF QGraphicsItem::mapToParent(qreal ax, qreal ay) const
0451 { return mapToParent(QPointF(ax, ay)); }
0452 inline QPointF QGraphicsItem::mapToScene(qreal ax, qreal ay) const
0453 { return mapToScene(QPointF(ax, ay)); }
0454 inline QPointF QGraphicsItem::mapFromItem(const QGraphicsItem *item, qreal ax, qreal ay) const
0455 { return mapFromItem(item, QPointF(ax, ay)); }
0456 inline QPointF QGraphicsItem::mapFromParent(qreal ax, qreal ay) const
0457 { return mapFromParent(QPointF(ax, ay)); }
0458 inline QPointF QGraphicsItem::mapFromScene(qreal ax, qreal ay) const
0459 { return mapFromScene(QPointF(ax, ay)); }
0460 inline QPolygonF QGraphicsItem::mapToItem(const QGraphicsItem *item, qreal ax, qreal ay, qreal w, qreal h) const
0461 { return mapToItem(item, QRectF(ax, ay, w, h)); }
0462 inline QPolygonF QGraphicsItem::mapToParent(qreal ax, qreal ay, qreal w, qreal h) const
0463 { return mapToParent(QRectF(ax, ay, w, h)); }
0464 inline QPolygonF QGraphicsItem::mapToScene(qreal ax, qreal ay, qreal w, qreal h) const
0465 { return mapToScene(QRectF(ax, ay, w, h)); }
0466 inline QRectF QGraphicsItem::mapRectToItem(const QGraphicsItem *item, qreal ax, qreal ay, qreal w, qreal h) const
0467 { return mapRectToItem(item, QRectF(ax, ay, w, h)); }
0468 inline QRectF QGraphicsItem::mapRectToParent(qreal ax, qreal ay, qreal w, qreal h) const
0469 { return mapRectToParent(QRectF(ax, ay, w, h)); }
0470 inline QRectF QGraphicsItem::mapRectToScene(qreal ax, qreal ay, qreal w, qreal h) const
0471 { return mapRectToScene(QRectF(ax, ay, w, h)); }
0472 inline QPolygonF QGraphicsItem::mapFromItem(const QGraphicsItem *item, qreal ax, qreal ay, qreal w, qreal h) const
0473 { return mapFromItem(item, QRectF(ax, ay, w, h)); }
0474 inline QPolygonF QGraphicsItem::mapFromParent(qreal ax, qreal ay, qreal w, qreal h) const
0475 { return mapFromParent(QRectF(ax, ay, w, h)); }
0476 inline QPolygonF QGraphicsItem::mapFromScene(qreal ax, qreal ay, qreal w, qreal h) const
0477 { return mapFromScene(QRectF(ax, ay, w, h)); }
0478 inline QRectF QGraphicsItem::mapRectFromItem(const QGraphicsItem *item, qreal ax, qreal ay, qreal w, qreal h) const
0479 { return mapRectFromItem(item, QRectF(ax, ay, w, h)); }
0480 inline QRectF QGraphicsItem::mapRectFromParent(qreal ax, qreal ay, qreal w, qreal h) const
0481 { return mapRectFromParent(QRectF(ax, ay, w, h)); }
0482 inline QRectF QGraphicsItem::mapRectFromScene(qreal ax, qreal ay, qreal w, qreal h) const
0483 { return mapRectFromScene(QRectF(ax, ay, w, h)); }
0484
0485
0486 class Q_WIDGETS_EXPORT QGraphicsObject : public QObject, public QGraphicsItem
0487 {
0488 Q_OBJECT
0489 Q_PROPERTY(QGraphicsObject* parent READ parentObject WRITE setParentItem NOTIFY parentChanged
0490 DESIGNABLE false)
0491 Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY opacityChanged FINAL)
0492 Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged)
0493 Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged FINAL)
0494 Q_PROPERTY(QPointF pos READ pos WRITE setPos FINAL)
0495 Q_PROPERTY(qreal x READ x WRITE setX NOTIFY xChanged FINAL)
0496 Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged FINAL)
0497 Q_PROPERTY(qreal z READ zValue WRITE setZValue NOTIFY zChanged FINAL)
0498 Q_PROPERTY(qreal rotation READ rotation WRITE setRotation NOTIFY rotationChanged)
0499 Q_PROPERTY(qreal scale READ scale WRITE setScale NOTIFY scaleChanged)
0500 Q_PROPERTY(QPointF transformOriginPoint READ transformOriginPoint WRITE setTransformOriginPoint)
0501 #if QT_CONFIG(graphicseffect)
0502 Q_PROPERTY(QGraphicsEffect *effect READ graphicsEffect WRITE setGraphicsEffect)
0503 #endif
0504 Q_PRIVATE_PROPERTY(QGraphicsItem::d_func(), qreal width READ width WRITE setWidth
0505 NOTIFY widthChanged RESET resetWidth FINAL)
0506 Q_PRIVATE_PROPERTY(QGraphicsItem::d_func(), qreal height READ height WRITE setHeight
0507 NOTIFY heightChanged RESET resetHeight FINAL)
0508 Q_INTERFACES(QGraphicsItem)
0509 public:
0510 explicit QGraphicsObject(QGraphicsItem *parent = nullptr);
0511 ~QGraphicsObject();
0512
0513 using QObject::children;
0514
0515 #ifndef QT_NO_GESTURES
0516 void grabGesture(Qt::GestureType type, Qt::GestureFlags flags = Qt::GestureFlags());
0517 void ungrabGesture(Qt::GestureType type);
0518 #endif
0519
0520 protected Q_SLOTS:
0521 void updateMicroFocus();
0522
0523 Q_SIGNALS:
0524 void parentChanged();
0525 void opacityChanged();
0526 void visibleChanged();
0527 void enabledChanged();
0528 void xChanged();
0529 void yChanged();
0530 void zChanged();
0531 void rotationChanged();
0532 void scaleChanged();
0533 void childrenChanged();
0534 void widthChanged();
0535 void heightChanged();
0536
0537 protected:
0538 QGraphicsObject(QGraphicsItemPrivate &dd, QGraphicsItem *parent);
0539
0540 bool event(QEvent *ev) override;
0541
0542 private:
0543 friend class QGraphicsItem;
0544 friend class QGraphicsItemPrivate;
0545 };
0546
0547
0548 class QAbstractGraphicsShapeItemPrivate;
0549 class Q_WIDGETS_EXPORT QAbstractGraphicsShapeItem : public QGraphicsItem
0550 {
0551 public:
0552 explicit QAbstractGraphicsShapeItem(QGraphicsItem *parent = nullptr);
0553 ~QAbstractGraphicsShapeItem();
0554
0555 QPen pen() const;
0556 void setPen(const QPen &pen);
0557
0558 QBrush brush() const;
0559 void setBrush(const QBrush &brush);
0560
0561 bool isObscuredBy(const QGraphicsItem *item) const override;
0562 QPainterPath opaqueArea() const override;
0563
0564 protected:
0565 QAbstractGraphicsShapeItem(QAbstractGraphicsShapeItemPrivate &dd,
0566 QGraphicsItem *parent);
0567
0568 private:
0569 Q_DISABLE_COPY(QAbstractGraphicsShapeItem)
0570 Q_DECLARE_PRIVATE(QAbstractGraphicsShapeItem)
0571 };
0572
0573 class QGraphicsPathItemPrivate;
0574 class Q_WIDGETS_EXPORT QGraphicsPathItem : public QAbstractGraphicsShapeItem
0575 {
0576 public:
0577 explicit QGraphicsPathItem(QGraphicsItem *parent = nullptr);
0578 explicit QGraphicsPathItem(const QPainterPath &path, QGraphicsItem *parent = nullptr);
0579 ~QGraphicsPathItem();
0580
0581 QPainterPath path() const;
0582 void setPath(const QPainterPath &path);
0583
0584 QRectF boundingRect() const override;
0585 QPainterPath shape() const override;
0586 bool contains(const QPointF &point) const override;
0587
0588 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override;
0589
0590 bool isObscuredBy(const QGraphicsItem *item) const override;
0591 QPainterPath opaqueArea() const override;
0592
0593 enum { Type = 2 };
0594 int type() const override;
0595
0596 protected:
0597 bool supportsExtension(Extension extension) const override;
0598 void setExtension(Extension extension, const QVariant &variant) override;
0599 QVariant extension(const QVariant &variant) const override;
0600
0601 private:
0602 Q_DISABLE_COPY(QGraphicsPathItem)
0603 Q_DECLARE_PRIVATE(QGraphicsPathItem)
0604 };
0605
0606 class QGraphicsRectItemPrivate;
0607 class Q_WIDGETS_EXPORT QGraphicsRectItem : public QAbstractGraphicsShapeItem
0608 {
0609 public:
0610 explicit QGraphicsRectItem(QGraphicsItem *parent = nullptr);
0611 explicit QGraphicsRectItem(const QRectF &rect, QGraphicsItem *parent = nullptr);
0612 explicit QGraphicsRectItem(qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent = nullptr);
0613 ~QGraphicsRectItem();
0614
0615 QRectF rect() const;
0616 void setRect(const QRectF &rect);
0617 inline void setRect(qreal x, qreal y, qreal w, qreal h);
0618
0619 QRectF boundingRect() const override;
0620 QPainterPath shape() const override;
0621 bool contains(const QPointF &point) const override;
0622
0623 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override;
0624
0625 bool isObscuredBy(const QGraphicsItem *item) const override;
0626 QPainterPath opaqueArea() const override;
0627
0628 enum { Type = 3 };
0629 int type() const override;
0630
0631 protected:
0632 bool supportsExtension(Extension extension) const override;
0633 void setExtension(Extension extension, const QVariant &variant) override;
0634 QVariant extension(const QVariant &variant) const override;
0635
0636 private:
0637 Q_DISABLE_COPY(QGraphicsRectItem)
0638 Q_DECLARE_PRIVATE(QGraphicsRectItem)
0639 };
0640
0641 inline void QGraphicsRectItem::setRect(qreal ax, qreal ay, qreal w, qreal h)
0642 { setRect(QRectF(ax, ay, w, h)); }
0643
0644 class QGraphicsEllipseItemPrivate;
0645 class Q_WIDGETS_EXPORT QGraphicsEllipseItem : public QAbstractGraphicsShapeItem
0646 {
0647 public:
0648 explicit QGraphicsEllipseItem(QGraphicsItem *parent = nullptr);
0649 explicit QGraphicsEllipseItem(const QRectF &rect, QGraphicsItem *parent = nullptr);
0650 explicit QGraphicsEllipseItem(qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent = nullptr);
0651 ~QGraphicsEllipseItem();
0652
0653 QRectF rect() const;
0654 void setRect(const QRectF &rect);
0655 inline void setRect(qreal x, qreal y, qreal w, qreal h);
0656
0657 int startAngle() const;
0658 void setStartAngle(int angle);
0659
0660 int spanAngle() const;
0661 void setSpanAngle(int angle);
0662
0663 QRectF boundingRect() const override;
0664 QPainterPath shape() const override;
0665 bool contains(const QPointF &point) const override;
0666
0667 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override;
0668
0669 bool isObscuredBy(const QGraphicsItem *item) const override;
0670 QPainterPath opaqueArea() const override;
0671
0672 enum { Type = 4 };
0673 int type() const override;
0674
0675 protected:
0676 bool supportsExtension(Extension extension) const override;
0677 void setExtension(Extension extension, const QVariant &variant) override;
0678 QVariant extension(const QVariant &variant) const override;
0679
0680 private:
0681 Q_DISABLE_COPY(QGraphicsEllipseItem)
0682 Q_DECLARE_PRIVATE(QGraphicsEllipseItem)
0683 };
0684
0685 inline void QGraphicsEllipseItem::setRect(qreal ax, qreal ay, qreal w, qreal h)
0686 { setRect(QRectF(ax, ay, w, h)); }
0687
0688 class QGraphicsPolygonItemPrivate;
0689 class Q_WIDGETS_EXPORT QGraphicsPolygonItem : public QAbstractGraphicsShapeItem
0690 {
0691 public:
0692 explicit QGraphicsPolygonItem(QGraphicsItem *parent = nullptr);
0693 explicit QGraphicsPolygonItem(const QPolygonF &polygon,
0694 QGraphicsItem *parent = nullptr);
0695 ~QGraphicsPolygonItem();
0696
0697 QPolygonF polygon() const;
0698 void setPolygon(const QPolygonF &polygon);
0699
0700 Qt::FillRule fillRule() const;
0701 void setFillRule(Qt::FillRule rule);
0702
0703 QRectF boundingRect() const override;
0704 QPainterPath shape() const override;
0705 bool contains(const QPointF &point) const override;
0706
0707 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override;
0708
0709 bool isObscuredBy(const QGraphicsItem *item) const override;
0710 QPainterPath opaqueArea() const override;
0711
0712 enum { Type = 5 };
0713 int type() const override;
0714
0715 protected:
0716 bool supportsExtension(Extension extension) const override;
0717 void setExtension(Extension extension, const QVariant &variant) override;
0718 QVariant extension(const QVariant &variant) const override;
0719
0720 private:
0721 Q_DISABLE_COPY(QGraphicsPolygonItem)
0722 Q_DECLARE_PRIVATE(QGraphicsPolygonItem)
0723 };
0724
0725 class QGraphicsLineItemPrivate;
0726 class Q_WIDGETS_EXPORT QGraphicsLineItem : public QGraphicsItem
0727 {
0728 public:
0729 explicit QGraphicsLineItem(QGraphicsItem *parent = nullptr);
0730 explicit QGraphicsLineItem(const QLineF &line, QGraphicsItem *parent = nullptr);
0731 explicit QGraphicsLineItem(qreal x1, qreal y1, qreal x2, qreal y2, QGraphicsItem *parent = nullptr);
0732 ~QGraphicsLineItem();
0733
0734 QPen pen() const;
0735 void setPen(const QPen &pen);
0736
0737 QLineF line() const;
0738 void setLine(const QLineF &line);
0739 inline void setLine(qreal x1, qreal y1, qreal x2, qreal y2)
0740 { setLine(QLineF(x1, y1, x2, y2)); }
0741
0742 QRectF boundingRect() const override;
0743 QPainterPath shape() const override;
0744 bool contains(const QPointF &point) const override;
0745
0746 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override;
0747
0748 bool isObscuredBy(const QGraphicsItem *item) const override;
0749 QPainterPath opaqueArea() const override;
0750
0751 enum { Type = 6 };
0752 int type() const override;
0753
0754 protected:
0755 bool supportsExtension(Extension extension) const override;
0756 void setExtension(Extension extension, const QVariant &variant) override;
0757 QVariant extension(const QVariant &variant) const override;
0758
0759 private:
0760 Q_DISABLE_COPY(QGraphicsLineItem)
0761 Q_DECLARE_PRIVATE(QGraphicsLineItem)
0762 };
0763
0764 class QGraphicsPixmapItemPrivate;
0765 class Q_WIDGETS_EXPORT QGraphicsPixmapItem : public QGraphicsItem
0766 {
0767 public:
0768 enum ShapeMode {
0769 MaskShape,
0770 BoundingRectShape,
0771 HeuristicMaskShape
0772 };
0773
0774 explicit QGraphicsPixmapItem(QGraphicsItem *parent = nullptr);
0775 explicit QGraphicsPixmapItem(const QPixmap &pixmap, QGraphicsItem *parent = nullptr);
0776 ~QGraphicsPixmapItem();
0777
0778 QPixmap pixmap() const;
0779 void setPixmap(const QPixmap &pixmap);
0780
0781 Qt::TransformationMode transformationMode() const;
0782 void setTransformationMode(Qt::TransformationMode mode);
0783
0784 QPointF offset() const;
0785 void setOffset(const QPointF &offset);
0786 inline void setOffset(qreal x, qreal y);
0787
0788 QRectF boundingRect() const override;
0789 QPainterPath shape() const override;
0790 bool contains(const QPointF &point) const override;
0791
0792 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
0793
0794 bool isObscuredBy(const QGraphicsItem *item) const override;
0795 QPainterPath opaqueArea() const override;
0796
0797 enum { Type = 7 };
0798 int type() const override;
0799
0800 ShapeMode shapeMode() const;
0801 void setShapeMode(ShapeMode mode);
0802
0803 protected:
0804 bool supportsExtension(Extension extension) const override;
0805 void setExtension(Extension extension, const QVariant &variant) override;
0806 QVariant extension(const QVariant &variant) const override;
0807
0808 private:
0809 Q_DISABLE_COPY(QGraphicsPixmapItem)
0810 Q_DECLARE_PRIVATE(QGraphicsPixmapItem)
0811 };
0812
0813 inline void QGraphicsPixmapItem::setOffset(qreal ax, qreal ay)
0814 { setOffset(QPointF(ax, ay)); }
0815
0816 class QGraphicsTextItemPrivate;
0817 class QTextDocument;
0818 class QTextCursor;
0819 class Q_WIDGETS_EXPORT QGraphicsTextItem : public QGraphicsObject
0820 {
0821 Q_OBJECT
0822 QDOC_PROPERTY(bool openExternalLinks READ openExternalLinks WRITE setOpenExternalLinks)
0823 QDOC_PROPERTY(QTextCursor textCursor READ textCursor WRITE setTextCursor)
0824
0825 public:
0826 explicit QGraphicsTextItem(QGraphicsItem *parent = nullptr);
0827 explicit QGraphicsTextItem(const QString &text, QGraphicsItem *parent = nullptr);
0828 ~QGraphicsTextItem();
0829
0830 QString toHtml() const;
0831 void setHtml(const QString &html);
0832
0833 QString toPlainText() const;
0834 void setPlainText(const QString &text);
0835
0836 QFont font() const;
0837 void setFont(const QFont &font);
0838
0839 void setDefaultTextColor(const QColor &c);
0840 QColor defaultTextColor() const;
0841
0842 QRectF boundingRect() const override;
0843 QPainterPath shape() const override;
0844 bool contains(const QPointF &point) const override;
0845
0846 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
0847
0848 bool isObscuredBy(const QGraphicsItem *item) const override;
0849 QPainterPath opaqueArea() const override;
0850
0851 enum { Type = 8 };
0852 int type() const override;
0853
0854 void setTextWidth(qreal width);
0855 qreal textWidth() const;
0856
0857 void adjustSize();
0858
0859 void setDocument(QTextDocument *document);
0860 QTextDocument *document() const;
0861
0862 void setTextInteractionFlags(Qt::TextInteractionFlags flags);
0863 Qt::TextInteractionFlags textInteractionFlags() const;
0864
0865 void setTabChangesFocus(bool b);
0866 bool tabChangesFocus() const;
0867
0868 void setOpenExternalLinks(bool open);
0869 bool openExternalLinks() const;
0870
0871 void setTextCursor(const QTextCursor &cursor);
0872 QTextCursor textCursor() const;
0873
0874 Q_SIGNALS:
0875 void linkActivated(const QString &);
0876 void linkHovered(const QString &);
0877
0878 protected:
0879 bool sceneEvent(QEvent *event) override;
0880 void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
0881 void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
0882 void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
0883 void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override;
0884 void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override;
0885 void keyPressEvent(QKeyEvent *event) override;
0886 void keyReleaseEvent(QKeyEvent *event) override;
0887 void focusInEvent(QFocusEvent *event) override;
0888 void focusOutEvent(QFocusEvent *event) override;
0889 void dragEnterEvent(QGraphicsSceneDragDropEvent *event) override;
0890 void dragLeaveEvent(QGraphicsSceneDragDropEvent *event) override;
0891 void dragMoveEvent(QGraphicsSceneDragDropEvent *event) override;
0892 void dropEvent(QGraphicsSceneDragDropEvent *event) override;
0893 void inputMethodEvent(QInputMethodEvent *event) override;
0894 void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;
0895 void hoverMoveEvent(QGraphicsSceneHoverEvent *event) override;
0896 void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override;
0897
0898 QVariant inputMethodQuery(Qt::InputMethodQuery query) const override;
0899
0900 bool supportsExtension(Extension extension) const override;
0901 void setExtension(Extension extension, const QVariant &variant) override;
0902 QVariant extension(const QVariant &variant) const override;
0903
0904 private:
0905 Q_DISABLE_COPY(QGraphicsTextItem)
0906 QGraphicsTextItemPrivate *dd;
0907 friend class QGraphicsTextItemPrivate;
0908 };
0909
0910 class QGraphicsSimpleTextItemPrivate;
0911 class Q_WIDGETS_EXPORT QGraphicsSimpleTextItem : public QAbstractGraphicsShapeItem
0912 {
0913 public:
0914 explicit QGraphicsSimpleTextItem(QGraphicsItem *parent = nullptr);
0915 explicit QGraphicsSimpleTextItem(const QString &text, QGraphicsItem *parent = nullptr);
0916 ~QGraphicsSimpleTextItem();
0917
0918 void setText(const QString &text);
0919 QString text() const;
0920
0921 void setFont(const QFont &font);
0922 QFont font() const;
0923
0924 QRectF boundingRect() const override;
0925 QPainterPath shape() const override;
0926 bool contains(const QPointF &point) const override;
0927
0928 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
0929
0930 bool isObscuredBy(const QGraphicsItem *item) const override;
0931 QPainterPath opaqueArea() const override;
0932
0933 enum { Type = 9 };
0934 int type() const override;
0935
0936 protected:
0937 bool supportsExtension(Extension extension) const override;
0938 void setExtension(Extension extension, const QVariant &variant) override;
0939 QVariant extension(const QVariant &variant) const override;
0940
0941 private:
0942 Q_DISABLE_COPY(QGraphicsSimpleTextItem)
0943 Q_DECLARE_PRIVATE(QGraphicsSimpleTextItem)
0944 };
0945
0946 class QGraphicsItemGroupPrivate;
0947 class Q_WIDGETS_EXPORT QGraphicsItemGroup : public QGraphicsItem
0948 {
0949 public:
0950 explicit QGraphicsItemGroup(QGraphicsItem *parent = nullptr);
0951 ~QGraphicsItemGroup();
0952
0953 void addToGroup(QGraphicsItem *item);
0954 void removeFromGroup(QGraphicsItem *item);
0955
0956 QRectF boundingRect() const override;
0957 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override;
0958
0959 bool isObscuredBy(const QGraphicsItem *item) const override;
0960 QPainterPath opaqueArea() const override;
0961
0962 enum { Type = 10 };
0963 int type() const override;
0964
0965 private:
0966 Q_DISABLE_COPY(QGraphicsItemGroup)
0967 Q_DECLARE_PRIVATE(QGraphicsItemGroup)
0968 };
0969
0970 template <class T> inline T qgraphicsitem_cast(QGraphicsItem *item)
0971 {
0972 typedef typename std::remove_cv<typename std::remove_pointer<T>::type>::type Item;
0973 constexpr int ItemType = int(Item::Type);
0974 if constexpr (int(Item::Type) == int(QGraphicsItem::Type))
0975 return static_cast<T>(item);
0976 else
0977 return (item && ItemType == item->type()) ? static_cast<T>(item) : nullptr;
0978 }
0979
0980 template <class T> inline T qgraphicsitem_cast(const QGraphicsItem *item)
0981 {
0982 typedef typename std::remove_cv<typename std::remove_pointer<T>::type>::type Item;
0983 constexpr int ItemType = int(Item::Type);
0984 if constexpr (ItemType == int(QGraphicsItem::Type))
0985 return static_cast<T>(item);
0986 else
0987 return (item && ItemType == item->type()) ? static_cast<T>(item) : nullptr;
0988 }
0989
0990 template <>
0991 inline QGraphicsItem *qgraphicsitem_cast<QGraphicsItem *>(QGraphicsItem *item)
0992 {
0993 return item;
0994 }
0995
0996 template <>
0997 inline const QGraphicsItem *qgraphicsitem_cast<const QGraphicsItem *>(const QGraphicsItem *item)
0998 {
0999 return item;
1000 }
1001
1002 #ifndef QT_NO_DEBUG_STREAM
1003 Q_WIDGETS_EXPORT QDebug operator<<(QDebug debug, const QGraphicsItem *item);
1004 Q_WIDGETS_EXPORT QDebug operator<<(QDebug debug, const QGraphicsObject *item);
1005 Q_WIDGETS_EXPORT QDebug operator<<(QDebug debug, QGraphicsItem::GraphicsItemChange change);
1006 Q_WIDGETS_EXPORT QDebug operator<<(QDebug debug, QGraphicsItem::GraphicsItemFlag flag);
1007 Q_WIDGETS_EXPORT QDebug operator<<(QDebug debug, QGraphicsItem::GraphicsItemFlags flags);
1008 #endif
1009
1010 QT_END_NAMESPACE
1011
1012 QT_DECL_METATYPE_EXTERN_TAGGED(QGraphicsItem*, QGraphicsItem_ptr, Q_WIDGETS_EXPORT)
1013
1014 #endif