/**************************************************************************** ** ** Copyright (C) 2015 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see http://www.qt.io/terms-conditions. For further ** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 or version 3 as published by the Free ** Software Foundation and appearing in the file LICENSE.LGPLv21 and ** LICENSE.LGPLv3 included in the packaging of this file. Please review the ** following information to ensure the GNU Lesser General Public License ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** As a special exception, The Qt Company gives you certain additional ** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QGRAPHICSITEM_H #define QGRAPHICSITEM_H #include #include #include #include #include #include #include class tst_QGraphicsItem; QT_BEGIN_HEADER QT_BEGIN_NAMESPACE QT_MODULE(Gui) #if !defined(QT_NO_GRAPHICSVIEW) || (QT_EDITION & QT_MODULE_GRAPHICSVIEW) != QT_MODULE_GRAPHICSVIEW class QBrush; class QCursor; class QFocusEvent; class QGraphicsEffect; class QGraphicsItemGroup; class QGraphicsObject; class QGraphicsSceneContextMenuEvent; class QGraphicsSceneDragDropEvent; class QGraphicsSceneEvent; class QGraphicsSceneHoverEvent; class QGraphicsSceneMouseEvent; class QGraphicsSceneWheelEvent; class QGraphicsScene; class QGraphicsTransform; class QGraphicsWidget; class QInputMethodEvent; class QKeyEvent; class QMatrix; class QMenu; class QPainter; class QPen; class QPointF; class QRectF; class QStyleOptionGraphicsItem; class QGraphicsItemPrivate; class Q_GUI_EXPORT QGraphicsItem { public: enum GraphicsItemFlag { ItemIsMovable = 0x1, ItemIsSelectable = 0x2, ItemIsFocusable = 0x4, ItemClipsToShape = 0x8, ItemClipsChildrenToShape = 0x10, ItemIgnoresTransformations = 0x20, ItemIgnoresParentOpacity = 0x40, ItemDoesntPropagateOpacityToChildren = 0x80, ItemStacksBehindParent = 0x100, ItemUsesExtendedStyleOption = 0x200, ItemHasNoContents = 0x400, ItemSendsGeometryChanges = 0x800, ItemAcceptsInputMethod = 0x1000, ItemNegativeZStacksBehindParent = 0x2000, ItemIsPanel = 0x4000, ItemIsFocusScope = 0x8000, // internal ItemSendsScenePositionChanges = 0x10000, ItemStopsClickFocusPropagation = 0x20000, ItemStopsFocusHandling = 0x40000 // NB! Don't forget to increase the d_ptr->flags bit field by 1 when adding a new flag. }; Q_DECLARE_FLAGS(GraphicsItemFlags, GraphicsItemFlag) enum GraphicsItemChange { ItemPositionChange, ItemMatrixChange, ItemVisibleChange, ItemEnabledChange, ItemSelectedChange, ItemParentChange, ItemChildAddedChange, ItemChildRemovedChange, ItemTransformChange, ItemPositionHasChanged, ItemTransformHasChanged, ItemSceneChange, ItemVisibleHasChanged, ItemEnabledHasChanged, ItemSelectedHasChanged, ItemParentHasChanged, ItemSceneHasChanged, ItemCursorChange, ItemCursorHasChanged, ItemToolTipChange, ItemToolTipHasChanged, ItemFlagsChange, ItemFlagsHaveChanged, ItemZValueChange, ItemZValueHasChanged, ItemOpacityChange, ItemOpacityHasChanged, ItemScenePositionHasChanged, ItemRotationChange, ItemRotationHasChanged, ItemScaleChange, ItemScaleHasChanged, ItemTransformOriginPointChange, ItemTransformOriginPointHasChanged }; enum CacheMode { NoCache, ItemCoordinateCache, DeviceCoordinateCache }; enum PanelModality { NonModal, PanelModal, SceneModal }; QGraphicsItem(QGraphicsItem *parent = 0 #ifndef Q_QDOC // ### obsolete argument , QGraphicsScene *scene = 0 #endif ); virtual ~QGraphicsItem(); QGraphicsScene *scene() const; QGraphicsItem *parentItem() const; QGraphicsItem *topLevelItem() const; QGraphicsObject *parentObject() const; QGraphicsWidget *parentWidget() const; QGraphicsWidget *topLevelWidget() const; QGraphicsWidget *window() const; QGraphicsItem *panel() const; void setParentItem(QGraphicsItem *parent); QList children() const; // ### obsolete QList childItems() const; bool isWidget() const; bool isWindow() const; bool isPanel() const; QGraphicsObject *toGraphicsObject(); const QGraphicsObject *toGraphicsObject() const; QGraphicsItemGroup *group() const; void setGroup(QGraphicsItemGroup *group); GraphicsItemFlags flags() const; void setFlag(GraphicsItemFlag flag, bool enabled = true); void setFlags(GraphicsItemFlags flags); CacheMode cacheMode() const; void setCacheMode(CacheMode mode, const QSize &cacheSize = QSize()); PanelModality panelModality() const; void setPanelModality(PanelModality panelModality); bool isBlockedByModalPanel(QGraphicsItem **blockingPanel = 0) const; #ifndef QT_NO_TOOLTIP QString toolTip() const; void setToolTip(const QString &toolTip); #endif #ifndef QT_NO_CURSOR QCursor cursor() const; void setCursor(const QCursor &cursor); bool hasCursor() const; void unsetCursor(); #endif bool isVisible() const; bool isVisibleTo(const QGraphicsItem *parent) const; void setVisible(bool visible); inline void hide() { setVisible(false); } inline void show() { setVisible(true); } bool isEnabled() const; void setEnabled(bool enabled); bool isSelected() const; void setSelected(bool selected); bool acceptDrops() const; void setAcceptDrops(bool on); qreal opacity() const; qreal effectiveOpacity() const; void setOpacity(qreal opacity); #ifndef QT_NO_GRAPHICSEFFECT // Effect QGraphicsEffect *graphicsEffect() const; void setGraphicsEffect(QGraphicsEffect *effect); #endif //QT_NO_GRAPHICSEFFECT Qt::MouseButtons acceptedMouseButtons() const; void setAcceptedMouseButtons(Qt::MouseButtons buttons); bool acceptsHoverEvents() const; // ### obsolete void setAcceptsHoverEvents(bool enabled); // ### obsolete bool acceptHoverEvents() const; void setAcceptHoverEvents(bool enabled); bool acceptTouchEvents() const; void setAcceptTouchEvents(bool enabled); bool filtersChildEvents() const; void setFiltersChildEvents(bool enabled); bool handlesChildEvents() const; void setHandlesChildEvents(bool enabled); bool isActive() const; void setActive(bool active); bool hasFocus() const; void setFocus(Qt::FocusReason focusReason = Qt::OtherFocusReason); void clearFocus(); QGraphicsItem *focusProxy() const; void setFocusProxy(QGraphicsItem *item); QGraphicsItem *focusItem() const; QGraphicsItem *focusScopeItem() const; void grabMouse(); void ungrabMouse(); void grabKeyboard(); void ungrabKeyboard(); // Positioning in scene coordinates QPointF pos() const; inline qreal x() const { return pos().x(); } void setX(qreal x); inline qreal y() const { return pos().y(); } void setY(qreal y); QPointF scenePos() const; void setPos(const QPointF &pos); inline void setPos(qreal x, qreal y); inline void moveBy(qreal dx, qreal dy) { setPos(pos().x() + dx, pos().y() + dy); } void ensureVisible(const QRectF &rect = QRectF(), int xmargin = 50, int ymargin = 50); inline void ensureVisible(qreal x, qreal y, qreal w, qreal h, int xmargin = 50, int ymargin = 50); // Local transformation QMatrix matrix() const; QMatrix sceneMatrix() const; void setMatrix(const QMatrix &matrix, bool combine = false); void resetMatrix(); QTransform transform() const; QTransform sceneTransform() const; QTransform deviceTransform(const QTransform &viewportTransform) const; QTransform itemTransform(const QGraphicsItem *other, bool *ok = 0) const; void setTransform(const QTransform &matrix, bool combine = false); void resetTransform(); void rotate(qreal angle); // ### obsolete void scale(qreal sx, qreal sy); // ### obsolete void shear(qreal sh, qreal sv); // ### obsolete void translate(qreal dx, qreal dy); // ### obsolete void setRotation(qreal angle); qreal rotation() const; void setScale(qreal scale); qreal scale() const; QList transformations() const; void setTransformations(const QList &transformations); QPointF transformOriginPoint() const; void setTransformOriginPoint(const QPointF &origin); inline void setTransformOriginPoint(qreal ax, qreal ay) { setTransformOriginPoint(QPointF(ax,ay)); } virtual void advance(int phase); // Stacking order qreal zValue() const; void setZValue(qreal z); void stackBefore(const QGraphicsItem *sibling); // Hit test virtual QRectF boundingRect() const = 0; QRectF childrenBoundingRect() const; QRectF sceneBoundingRect() const; virtual QPainterPath shape() const; bool isClipped() const; QPainterPath clipPath() const; virtual bool contains(const QPointF &point) const; virtual bool collidesWithItem(const QGraphicsItem *other, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const; virtual bool collidesWithPath(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const; QList collidingItems(Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const; bool isObscured() const; bool isObscured(const QRectF &rect) const; // ### Qt 5: merge with isObscured(), add QRectF arg to isObscuredBy() inline bool isObscured(qreal x, qreal y, qreal w, qreal h) const; virtual bool isObscuredBy(const QGraphicsItem *item) const; virtual QPainterPath opaqueArea() const; QRegion boundingRegion(const QTransform &itemToDeviceTransform) const; qreal boundingRegionGranularity() const; void setBoundingRegionGranularity(qreal granularity); // Drawing virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0) = 0; void update(const QRectF &rect = QRectF()); inline void update(qreal x, qreal y, qreal width, qreal height); void scroll(qreal dx, qreal dy, const QRectF &rect = QRectF()); // Coordinate mapping QPointF mapToItem(const QGraphicsItem *item, const QPointF &point) const; QPointF mapToParent(const QPointF &point) const; QPointF mapToScene(const QPointF &point) const; QPolygonF mapToItem(const QGraphicsItem *item, const QRectF &rect) const; QPolygonF mapToParent(const QRectF &rect) const; QPolygonF mapToScene(const QRectF &rect) const; QRectF mapRectToItem(const QGraphicsItem *item, const QRectF &rect) const; QRectF mapRectToParent(const QRectF &rect) const; QRectF mapRectToScene(const QRectF &rect) const; QPolygonF mapToItem(const QGraphicsItem *item, const QPolygonF &polygon) const; QPolygonF mapToParent(const QPolygonF &polygon) const; QPolygonF mapToScene(const QPolygonF &polygon) const; QPainterPath mapToItem(const QGraphicsItem *item, const QPainterPath &path) const; QPainterPath mapToParent(const QPainterPath &path) const; QPainterPath mapToScene(const QPainterPath &path) const; QPointF mapFromItem(const QGraphicsItem *item, const QPointF &point) const; QPointF mapFromParent(const QPointF &point) const; QPointF mapFromScene(const QPointF &point) const; QPolygonF mapFromItem(const QGraphicsItem *item, const QRectF &rect) const; QPolygonF mapFromParent(const QRectF &rect) const; QPolygonF mapFromScene(const QRectF &rect) const; QRectF mapRectFromItem(const QGraphicsItem *item, const QRectF &rect) const; QRectF mapRectFromParent(const QRectF &rect) const; QRectF mapRectFromScene(const QRectF &rect) const; QPolygonF mapFromItem(const QGraphicsItem *item, const QPolygonF &polygon) const; QPolygonF mapFromParent(const QPolygonF &polygon) const; QPolygonF mapFromScene(const QPolygonF &polygon) const; QPainterPath mapFromItem(const QGraphicsItem *item, const QPainterPath &path) const; QPainterPath mapFromParent(const QPainterPath &path) const; QPainterPath mapFromScene(const QPainterPath &path) const; inline QPointF mapToItem(const QGraphicsItem *item, qreal x, qreal y) const; inline QPointF mapToParent(qreal x, qreal y) const; inline QPointF mapToScene(qreal x, qreal y) const; inline QPolygonF mapToItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const; inline QPolygonF mapToParent(qreal x, qreal y, qreal w, qreal h) const; inline QPolygonF mapToScene(qreal x, qreal y, qreal w, qreal h) const; inline QRectF mapRectToItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const; inline QRectF mapRectToParent(qreal x, qreal y, qreal w, qreal h) const; inline QRectF mapRectToScene(qreal x, qreal y, qreal w, qreal h) const; inline QPointF mapFromItem(const QGraphicsItem *item, qreal x, qreal y) const; inline QPointF mapFromParent(qreal x, qreal y) const; inline QPointF mapFromScene(qreal x, qreal y) const; inline QPolygonF mapFromItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const; inline QPolygonF mapFromParent(qreal x, qreal y, qreal w, qreal h) const; inline QPolygonF mapFromScene(qreal x, qreal y, qreal w, qreal h) const; inline QRectF mapRectFromItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const; inline QRectF mapRectFromParent(qreal x, qreal y, qreal w, qreal h) const; inline QRectF mapRectFromScene(qreal x, qreal y, qreal w, qreal h) const; bool isAncestorOf(const QGraphicsItem *child) const; QGraphicsItem *commonAncestorItem(const QGraphicsItem *other) const; bool isUnderMouse() const; // Custom data QVariant data(int key) const; void setData(int key, const QVariant &value); Qt::InputMethodHints inputMethodHints() const; void setInputMethodHints(Qt::InputMethodHints hints); enum { Type = 1, UserType = 65536 }; virtual int type() const; void installSceneEventFilter(QGraphicsItem *filterItem); void removeSceneEventFilter(QGraphicsItem *filterItem); protected: void updateMicroFocus(); virtual bool sceneEventFilter(QGraphicsItem *watched, QEvent *event); virtual bool sceneEvent(QEvent *event); 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 hoverMoveEvent(QGraphicsSceneHoverEvent *event); virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); virtual void keyPressEvent(QKeyEvent *event); virtual void keyReleaseEvent(QKeyEvent *event); virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event); virtual void wheelEvent(QGraphicsSceneWheelEvent *event); virtual void inputMethodEvent(QInputMethodEvent *event); virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const; virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value); enum Extension { UserExtension = 0x80000000 }; virtual bool supportsExtension(Extension extension) const; virtual void setExtension(Extension extension, const QVariant &variant); virtual QVariant extension(const QVariant &variant) const; protected: QGraphicsItem(QGraphicsItemPrivate &dd, QGraphicsItem *parent, QGraphicsScene *scene); QScopedPointer d_ptr; void addToIndex(); void removeFromIndex(); void prepareGeometryChange(); private: Q_DISABLE_COPY(QGraphicsItem) Q_DECLARE_PRIVATE(QGraphicsItem) friend class QGraphicsItemGroup; friend class QGraphicsScene; friend class QGraphicsScenePrivate; friend class QGraphicsSceneFindItemBspTreeVisitor; friend class QGraphicsSceneBspTree; friend class QGraphicsView; friend class QGraphicsViewPrivate; friend class QGraphicsObject; friend class QGraphicsWidget; friend class QGraphicsWidgetPrivate; friend class QGraphicsProxyWidgetPrivate; friend class QGraphicsSceneIndex; friend class QGraphicsSceneIndexPrivate; friend class QGraphicsSceneBspTreeIndex; friend class QGraphicsSceneBspTreeIndexPrivate; friend class QGraphicsItemEffectSourcePrivate; friend class QGraphicsTransformPrivate; #ifndef QT_NO_GESTURES friend class QGestureManager; #endif friend class ::tst_QGraphicsItem; friend bool qt_closestLeaf(const QGraphicsItem *, const QGraphicsItem *); friend bool qt_closestItemFirst(const QGraphicsItem *, const QGraphicsItem *); }; Q_DECLARE_OPERATORS_FOR_FLAGS(QGraphicsItem::GraphicsItemFlags) Q_DECLARE_INTERFACE(QGraphicsItem, "com.trolltech.Qt.QGraphicsItem") inline void QGraphicsItem::setPos(qreal ax, qreal ay) { setPos(QPointF(ax, ay)); } inline void QGraphicsItem::ensureVisible(qreal ax, qreal ay, qreal w, qreal h, int xmargin, int ymargin) { ensureVisible(QRectF(ax, ay, w, h), xmargin, ymargin); } inline void QGraphicsItem::update(qreal ax, qreal ay, qreal width, qreal height) { update(QRectF(ax, ay, width, height)); } inline bool QGraphicsItem::isObscured(qreal ax, qreal ay, qreal w, qreal h) const { return isObscured(QRectF(ax, ay, w, h)); } inline QPointF QGraphicsItem::mapToItem(const QGraphicsItem *item, qreal ax, qreal ay) const { return mapToItem(item, QPointF(ax, ay)); } inline QPointF QGraphicsItem::mapToParent(qreal ax, qreal ay) const { return mapToParent(QPointF(ax, ay)); } inline QPointF QGraphicsItem::mapToScene(qreal ax, qreal ay) const { return mapToScene(QPointF(ax, ay)); } inline QPointF QGraphicsItem::mapFromItem(const QGraphicsItem *item, qreal ax, qreal ay) const { return mapFromItem(item, QPointF(ax, ay)); } inline QPointF QGraphicsItem::mapFromParent(qreal ax, qreal ay) const { return mapFromParent(QPointF(ax, ay)); } inline QPointF QGraphicsItem::mapFromScene(qreal ax, qreal ay) const { return mapFromScene(QPointF(ax, ay)); } inline QPolygonF QGraphicsItem::mapToItem(const QGraphicsItem *item, qreal ax, qreal ay, qreal w, qreal h) const { return mapToItem(item, QRectF(ax, ay, w, h)); } inline QPolygonF QGraphicsItem::mapToParent(qreal ax, qreal ay, qreal w, qreal h) const { return mapToParent(QRectF(ax, ay, w, h)); } inline QPolygonF QGraphicsItem::mapToScene(qreal ax, qreal ay, qreal w, qreal h) const { return mapToScene(QRectF(ax, ay, w, h)); } inline QRectF QGraphicsItem::mapRectToItem(const QGraphicsItem *item, qreal ax, qreal ay, qreal w, qreal h) const { return mapRectToItem(item, QRectF(ax, ay, w, h)); } inline QRectF QGraphicsItem::mapRectToParent(qreal ax, qreal ay, qreal w, qreal h) const { return mapRectToParent(QRectF(ax, ay, w, h)); } inline QRectF QGraphicsItem::mapRectToScene(qreal ax, qreal ay, qreal w, qreal h) const { return mapRectToScene(QRectF(ax, ay, w, h)); } inline QPolygonF QGraphicsItem::mapFromItem(const QGraphicsItem *item, qreal ax, qreal ay, qreal w, qreal h) const { return mapFromItem(item, QRectF(ax, ay, w, h)); } inline QPolygonF QGraphicsItem::mapFromParent(qreal ax, qreal ay, qreal w, qreal h) const { return mapFromParent(QRectF(ax, ay, w, h)); } inline QPolygonF QGraphicsItem::mapFromScene(qreal ax, qreal ay, qreal w, qreal h) const { return mapFromScene(QRectF(ax, ay, w, h)); } inline QRectF QGraphicsItem::mapRectFromItem(const QGraphicsItem *item, qreal ax, qreal ay, qreal w, qreal h) const { return mapRectFromItem(item, QRectF(ax, ay, w, h)); } inline QRectF QGraphicsItem::mapRectFromParent(qreal ax, qreal ay, qreal w, qreal h) const { return mapRectFromParent(QRectF(ax, ay, w, h)); } inline QRectF QGraphicsItem::mapRectFromScene(qreal ax, qreal ay, qreal w, qreal h) const { return mapRectFromScene(QRectF(ax, ay, w, h)); } class Q_GUI_EXPORT QGraphicsObject : public QObject, public QGraphicsItem { Q_OBJECT Q_PROPERTY(QGraphicsObject * parent READ parentObject WRITE setParentItem NOTIFY parentChanged DESIGNABLE false) Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY opacityChanged FINAL) Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged) Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged FINAL) Q_PROPERTY(QPointF pos READ pos WRITE setPos FINAL) Q_PROPERTY(qreal x READ x WRITE setX NOTIFY xChanged FINAL) Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged FINAL) Q_PROPERTY(qreal z READ zValue WRITE setZValue NOTIFY zChanged FINAL) Q_PROPERTY(qreal rotation READ rotation WRITE setRotation NOTIFY rotationChanged) Q_PROPERTY(qreal scale READ scale WRITE setScale NOTIFY scaleChanged) Q_PROPERTY(QPointF transformOriginPoint READ transformOriginPoint WRITE setTransformOriginPoint) #ifndef QT_NO_GRAPHICSEFFECT Q_PROPERTY(QGraphicsEffect *effect READ graphicsEffect WRITE setGraphicsEffect) #endif Q_PRIVATE_PROPERTY(QGraphicsItem::d_func(), QDeclarativeListProperty children READ childrenList DESIGNABLE false NOTIFY childrenChanged) Q_PRIVATE_PROPERTY(QGraphicsItem::d_func(), qreal width READ width WRITE setWidth NOTIFY widthChanged RESET resetWidth FINAL) Q_PRIVATE_PROPERTY(QGraphicsItem::d_func(), qreal height READ height WRITE setHeight NOTIFY heightChanged RESET resetHeight FINAL) Q_CLASSINFO("DefaultProperty", "children") Q_INTERFACES(QGraphicsItem) public: QGraphicsObject(QGraphicsItem *parent = 0); // ### Qt 5: Disambiguate #ifdef Q_NO_USING_KEYWORD const QObjectList &children() const { return QObject::children(); } #else using QObject::children; #endif #ifndef QT_NO_GESTURES void grabGesture(Qt::GestureType type, Qt::GestureFlags flags = Qt::GestureFlags()); void ungrabGesture(Qt::GestureType type); #endif protected Q_SLOTS: void updateMicroFocus(); Q_SIGNALS: void parentChanged(); void opacityChanged(); void visibleChanged(); void enabledChanged(); void xChanged(); void yChanged(); void zChanged(); void rotationChanged(); void scaleChanged(); void childrenChanged(); void widthChanged(); void heightChanged(); protected: QGraphicsObject(QGraphicsItemPrivate &dd, QGraphicsItem *parent, QGraphicsScene *scene); private: friend class QGraphicsItem; friend class QGraphicsItemPrivate; }; class QAbstractGraphicsShapeItemPrivate; class Q_GUI_EXPORT QAbstractGraphicsShapeItem : public QGraphicsItem { public: QAbstractGraphicsShapeItem(QGraphicsItem *parent = 0 #ifndef Q_QDOC // ### obsolete argument , QGraphicsScene *scene = 0 #endif ); ~QAbstractGraphicsShapeItem(); QPen pen() const; void setPen(const QPen &pen); QBrush brush() const; void setBrush(const QBrush &brush); bool isObscuredBy(const QGraphicsItem *item) const; QPainterPath opaqueArea() const; protected: QAbstractGraphicsShapeItem(QAbstractGraphicsShapeItemPrivate &dd, QGraphicsItem *parent, QGraphicsScene *scene); private: Q_DISABLE_COPY(QAbstractGraphicsShapeItem) Q_DECLARE_PRIVATE(QAbstractGraphicsShapeItem) }; class QGraphicsPathItemPrivate; class Q_GUI_EXPORT QGraphicsPathItem : public QAbstractGraphicsShapeItem { public: QGraphicsPathItem(QGraphicsItem *parent = 0 #ifndef Q_QDOC // ### obsolete argument , QGraphicsScene *scene = 0 #endif ); QGraphicsPathItem(const QPainterPath &path, QGraphicsItem *parent = 0 #ifndef Q_QDOC // ### obsolete argument , QGraphicsScene *scene = 0 #endif ); ~QGraphicsPathItem(); QPainterPath path() const; void setPath(const QPainterPath &path); QRectF boundingRect() const; QPainterPath shape() const; bool contains(const QPointF &point) const; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); bool isObscuredBy(const QGraphicsItem *item) const; QPainterPath opaqueArea() const; enum { Type = 2 }; int type() const; protected: bool supportsExtension(Extension extension) const; void setExtension(Extension extension, const QVariant &variant); QVariant extension(const QVariant &variant) const; private: Q_DISABLE_COPY(QGraphicsPathItem) Q_DECLARE_PRIVATE(QGraphicsPathItem) }; class QGraphicsRectItemPrivate; class Q_GUI_EXPORT QGraphicsRectItem : public QAbstractGraphicsShapeItem { public: QGraphicsRectItem(QGraphicsItem *parent = 0 #ifndef Q_QDOC // ### obsolete argument , QGraphicsScene *scene = 0 #endif ); QGraphicsRectItem(const QRectF &rect, QGraphicsItem *parent = 0 #ifndef Q_QDOC // ### obsolete argument , QGraphicsScene *scene = 0 #endif ); QGraphicsRectItem(qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent = 0 #ifndef Q_QDOC // ### obsolete argument , QGraphicsScene *scene = 0 #endif ); ~QGraphicsRectItem(); QRectF rect() const; void setRect(const QRectF &rect); inline void setRect(qreal x, qreal y, qreal w, qreal h); QRectF boundingRect() const; QPainterPath shape() const; bool contains(const QPointF &point) const; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); bool isObscuredBy(const QGraphicsItem *item) const; QPainterPath opaqueArea() const; enum { Type = 3 }; int type() const; protected: bool supportsExtension(Extension extension) const; void setExtension(Extension extension, const QVariant &variant); QVariant extension(const QVariant &variant) const; private: Q_DISABLE_COPY(QGraphicsRectItem) Q_DECLARE_PRIVATE(QGraphicsRectItem) }; inline void QGraphicsRectItem::setRect(qreal ax, qreal ay, qreal w, qreal h) { setRect(QRectF(ax, ay, w, h)); } class QGraphicsEllipseItemPrivate; class Q_GUI_EXPORT QGraphicsEllipseItem : public QAbstractGraphicsShapeItem { public: QGraphicsEllipseItem(QGraphicsItem *parent = 0 #ifndef Q_QDOC // ### obsolete argument , QGraphicsScene *scene = 0 #endif ); QGraphicsEllipseItem(const QRectF &rect, QGraphicsItem *parent = 0 #ifndef Q_QDOC // ### obsolete argument , QGraphicsScene *scene = 0 #endif ); QGraphicsEllipseItem(qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent = 0 #ifndef Q_QDOC // ### obsolete argument , QGraphicsScene *scene = 0 #endif ); ~QGraphicsEllipseItem(); QRectF rect() const; void setRect(const QRectF &rect); inline void setRect(qreal x, qreal y, qreal w, qreal h); int startAngle() const; void setStartAngle(int angle); int spanAngle() const; void setSpanAngle(int angle); QRectF boundingRect() const; QPainterPath shape() const; bool contains(const QPointF &point) const; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); bool isObscuredBy(const QGraphicsItem *item) const; QPainterPath opaqueArea() const; enum { Type = 4 }; int type() const; protected: bool supportsExtension(Extension extension) const; void setExtension(Extension extension, const QVariant &variant); QVariant extension(const QVariant &variant) const; private: Q_DISABLE_COPY(QGraphicsEllipseItem) Q_DECLARE_PRIVATE(QGraphicsEllipseItem) }; inline void QGraphicsEllipseItem::setRect(qreal ax, qreal ay, qreal w, qreal h) { setRect(QRectF(ax, ay, w, h)); } class QGraphicsPolygonItemPrivate; class Q_GUI_EXPORT QGraphicsPolygonItem : public QAbstractGraphicsShapeItem { public: QGraphicsPolygonItem(QGraphicsItem *parent = 0 #ifndef Q_QDOC // ### obsolete argument , QGraphicsScene *scene = 0 #endif ); QGraphicsPolygonItem(const QPolygonF &polygon, QGraphicsItem *parent = 0 #ifndef Q_QDOC // ### obsolete argument , QGraphicsScene *scene = 0 #endif ); ~QGraphicsPolygonItem(); QPolygonF polygon() const; void setPolygon(const QPolygonF &polygon); Qt::FillRule fillRule() const; void setFillRule(Qt::FillRule rule); QRectF boundingRect() const; QPainterPath shape() const; bool contains(const QPointF &point) const; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); bool isObscuredBy(const QGraphicsItem *item) const; QPainterPath opaqueArea() const; enum { Type = 5 }; int type() const; protected: bool supportsExtension(Extension extension) const; void setExtension(Extension extension, const QVariant &variant); QVariant extension(const QVariant &variant) const; private: Q_DISABLE_COPY(QGraphicsPolygonItem) Q_DECLARE_PRIVATE(QGraphicsPolygonItem) }; class QGraphicsLineItemPrivate; class Q_GUI_EXPORT QGraphicsLineItem : public QGraphicsItem { public: QGraphicsLineItem(QGraphicsItem *parent = 0 #ifndef Q_QDOC // ### obsolete argument , QGraphicsScene *scene = 0 #endif ); QGraphicsLineItem(const QLineF &line, QGraphicsItem *parent = 0 #ifndef Q_QDOC // ### obsolete argument , QGraphicsScene *scene = 0 #endif ); QGraphicsLineItem(qreal x1, qreal y1, qreal x2, qreal y2, QGraphicsItem *parent = 0 #ifndef Q_QDOC // ### obsolete argument , QGraphicsScene *scene = 0 #endif ); ~QGraphicsLineItem(); QPen pen() const; void setPen(const QPen &pen); QLineF line() const; void setLine(const QLineF &line); inline void setLine(qreal x1, qreal y1, qreal x2, qreal y2) { setLine(QLineF(x1, y1, x2, y2)); } QRectF boundingRect() const; QPainterPath shape() const; bool contains(const QPointF &point) const; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); bool isObscuredBy(const QGraphicsItem *item) const; QPainterPath opaqueArea() const; enum { Type = 6 }; int type() const; protected: bool supportsExtension(Extension extension) const; void setExtension(Extension extension, const QVariant &variant); QVariant extension(const QVariant &variant) const; private: Q_DISABLE_COPY(QGraphicsLineItem) Q_DECLARE_PRIVATE(QGraphicsLineItem) }; class QGraphicsPixmapItemPrivate; class Q_GUI_EXPORT QGraphicsPixmapItem : public QGraphicsItem { public: enum ShapeMode { MaskShape, BoundingRectShape, HeuristicMaskShape }; QGraphicsPixmapItem(QGraphicsItem *parent = 0 #ifndef Q_QDOC // ### obsolete argument , QGraphicsScene *scene = 0 #endif ); QGraphicsPixmapItem(const QPixmap &pixmap, QGraphicsItem *parent = 0 #ifndef Q_QDOC // ### obsolete argument , QGraphicsScene *scene = 0 #endif ); ~QGraphicsPixmapItem(); QPixmap pixmap() const; void setPixmap(const QPixmap &pixmap); Qt::TransformationMode transformationMode() const; void setTransformationMode(Qt::TransformationMode mode); QPointF offset() const; void setOffset(const QPointF &offset); inline void setOffset(qreal x, qreal y); QRectF boundingRect() const; QPainterPath shape() const; bool contains(const QPointF &point) const; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); bool isObscuredBy(const QGraphicsItem *item) const; QPainterPath opaqueArea() const; enum { Type = 7 }; int type() const; ShapeMode shapeMode() const; void setShapeMode(ShapeMode mode); protected: bool supportsExtension(Extension extension) const; void setExtension(Extension extension, const QVariant &variant); QVariant extension(const QVariant &variant) const; private: Q_DISABLE_COPY(QGraphicsPixmapItem) Q_DECLARE_PRIVATE(QGraphicsPixmapItem) }; inline void QGraphicsPixmapItem::setOffset(qreal ax, qreal ay) { setOffset(QPointF(ax, ay)); } class QGraphicsTextItemPrivate; class QTextDocument; class QTextCursor; class Q_GUI_EXPORT QGraphicsTextItem : public QGraphicsObject { Q_OBJECT QDOC_PROPERTY(bool openExternalLinks READ openExternalLinks WRITE setOpenExternalLinks) QDOC_PROPERTY(QTextCursor textCursor READ textCursor WRITE setTextCursor) public: QGraphicsTextItem(QGraphicsItem *parent = 0 #ifndef Q_QDOC // ### obsolete argument , QGraphicsScene *scene = 0 #endif ); QGraphicsTextItem(const QString &text, QGraphicsItem *parent = 0 #ifndef Q_QDOC // ### obsolete argument , QGraphicsScene *scene = 0 #endif ); ~QGraphicsTextItem(); QString toHtml() const; void setHtml(const QString &html); QString toPlainText() const; void setPlainText(const QString &text); QFont font() const; void setFont(const QFont &font); void setDefaultTextColor(const QColor &c); QColor defaultTextColor() const; QRectF boundingRect() const; QPainterPath shape() const; bool contains(const QPointF &point) const; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); bool isObscuredBy(const QGraphicsItem *item) const; QPainterPath opaqueArea() const; enum { Type = 8 }; int type() const; void setTextWidth(qreal width); qreal textWidth() const; void adjustSize(); void setDocument(QTextDocument *document); QTextDocument *document() const; void setTextInteractionFlags(Qt::TextInteractionFlags flags); Qt::TextInteractionFlags textInteractionFlags() const; void setTabChangesFocus(bool b); bool tabChangesFocus() const; void setOpenExternalLinks(bool open); bool openExternalLinks() const; void setTextCursor(const QTextCursor &cursor); QTextCursor textCursor() const; Q_SIGNALS: void linkActivated(const QString &); void linkHovered(const QString &); protected: bool sceneEvent(QEvent *event); void mousePressEvent(QGraphicsSceneMouseEvent *event); void mouseMoveEvent(QGraphicsSceneMouseEvent *event); void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event); void contextMenuEvent(QGraphicsSceneContextMenuEvent *event); void keyPressEvent(QKeyEvent *event); void keyReleaseEvent(QKeyEvent *event); void focusInEvent(QFocusEvent *event); void focusOutEvent(QFocusEvent *event); void dragEnterEvent(QGraphicsSceneDragDropEvent *event); void dragLeaveEvent(QGraphicsSceneDragDropEvent *event); void dragMoveEvent(QGraphicsSceneDragDropEvent *event); void dropEvent(QGraphicsSceneDragDropEvent *event); void inputMethodEvent(QInputMethodEvent *event); void hoverEnterEvent(QGraphicsSceneHoverEvent *event); void hoverMoveEvent(QGraphicsSceneHoverEvent *event); void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); QVariant inputMethodQuery(Qt::InputMethodQuery query) const; bool supportsExtension(Extension extension) const; void setExtension(Extension extension, const QVariant &variant); QVariant extension(const QVariant &variant) const; private: Q_DISABLE_COPY(QGraphicsTextItem) Q_PRIVATE_SLOT(dd, void _q_updateBoundingRect(const QSizeF &)) Q_PRIVATE_SLOT(dd, void _q_update(QRectF)) Q_PRIVATE_SLOT(dd, void _q_ensureVisible(QRectF)) QGraphicsTextItemPrivate *dd; friend class QGraphicsTextItemPrivate; }; class QGraphicsSimpleTextItemPrivate; class Q_GUI_EXPORT QGraphicsSimpleTextItem : public QAbstractGraphicsShapeItem { public: QGraphicsSimpleTextItem(QGraphicsItem *parent = 0 #ifndef Q_QDOC // ### obsolete argument , QGraphicsScene *scene = 0 #endif ); QGraphicsSimpleTextItem(const QString &text, QGraphicsItem *parent = 0 #ifndef Q_QDOC // ### obsolete argument , QGraphicsScene *scene = 0 #endif ); ~QGraphicsSimpleTextItem(); void setText(const QString &text); QString text() const; void setFont(const QFont &font); QFont font() const; QRectF boundingRect() const; QPainterPath shape() const; bool contains(const QPointF &point) const; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); bool isObscuredBy(const QGraphicsItem *item) const; QPainterPath opaqueArea() const; enum { Type = 9 }; int type() const; protected: bool supportsExtension(Extension extension) const; void setExtension(Extension extension, const QVariant &variant); QVariant extension(const QVariant &variant) const; private: Q_DISABLE_COPY(QGraphicsSimpleTextItem) Q_DECLARE_PRIVATE(QGraphicsSimpleTextItem) }; class QGraphicsItemGroupPrivate; class Q_GUI_EXPORT QGraphicsItemGroup : public QGraphicsItem { public: QGraphicsItemGroup(QGraphicsItem *parent = 0 #ifndef Q_QDOC // ### obsolete argument , QGraphicsScene *scene = 0 #endif ); ~QGraphicsItemGroup(); void addToGroup(QGraphicsItem *item); void removeFromGroup(QGraphicsItem *item); QRectF boundingRect() const; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); bool isObscuredBy(const QGraphicsItem *item) const; QPainterPath opaqueArea() const; enum { Type = 10 }; int type() const; private: Q_DISABLE_COPY(QGraphicsItemGroup) Q_DECLARE_PRIVATE(QGraphicsItemGroup) }; template inline T qgraphicsitem_cast(QGraphicsItem *item) { return int(static_cast(0)->Type) == int(QGraphicsItem::Type) || (item && int(static_cast(0)->Type) == item->type()) ? static_cast(item) : 0; } template inline T qgraphicsitem_cast(const QGraphicsItem *item) { return int(static_cast(0)->Type) == int(QGraphicsItem::Type) || (item && int(static_cast(0)->Type) == item->type()) ? static_cast(item) : 0; } #ifndef QT_NO_DEBUG_STREAM Q_GUI_EXPORT QDebug operator<<(QDebug debug, QGraphicsItem *item); Q_GUI_EXPORT QDebug operator<<(QDebug debug, QGraphicsObject *item); Q_GUI_EXPORT QDebug operator<<(QDebug debug, QGraphicsItem::GraphicsItemChange change); Q_GUI_EXPORT QDebug operator<<(QDebug debug, QGraphicsItem::GraphicsItemFlag flag); Q_GUI_EXPORT QDebug operator<<(QDebug debug, QGraphicsItem::GraphicsItemFlags flags); #endif QT_END_NAMESPACE Q_DECLARE_METATYPE(QGraphicsItem *) Q_DECLARE_METATYPE(QGraphicsScene *) QT_BEGIN_NAMESPACE #endif // QT_NO_GRAPHICSVIEW QT_END_NAMESPACE QT_END_HEADER #endif // QGRAPHICSITEM_H