qgraphicsitem.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:32k
源码类别:

系统编程

开发平台:

Unix_Linux

  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  4. ** Contact: Qt Software Information (qt-info@nokia.com)
  5. **
  6. ** This file is part of the QtGui module of the Qt Toolkit.
  7. **
  8. ** Commercial Usage
  9. ** Licensees holding valid Qt Commercial licenses may use this file in
  10. ** accordance with the Qt Commercial License Agreement provided with the
  11. ** Software or, alternatively, in accordance with the terms contained in
  12. ** a written agreement between you and Nokia.
  13. **
  14. **
  15. ** GNU General Public License Usage
  16. ** Alternatively, this file may be used under the terms of the GNU
  17. ** General Public License versions 2.0 or 3.0 as published by the Free
  18. ** Software Foundation and appearing in the file LICENSE.GPL included in
  19. ** the packaging of this file.  Please review the following information
  20. ** to ensure GNU General Public Licensing requirements will be met:
  21. ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
  22. ** http://www.gnu.org/copyleft/gpl.html.  In addition, as a special
  23. ** exception, Nokia gives you certain additional rights. These rights
  24. ** are described in the Nokia Qt GPL Exception version 1.3, included in
  25. ** the file GPL_EXCEPTION.txt in this package.
  26. **
  27. ** Qt for Windows(R) Licensees
  28. ** As a special exception, Nokia, as the sole copyright holder for Qt
  29. ** Designer, grants users of the Qt/Eclipse Integration plug-in the
  30. ** right for the Qt/Eclipse Integration to link to functionality
  31. ** provided by Qt Designer and its related libraries.
  32. **
  33. ** If you are unsure which license is appropriate for your use, please
  34. ** contact the sales department at qt-sales@nokia.com.
  35. **
  36. ****************************************************************************/
  37. #ifndef QGRAPHICSITEM_H
  38. #define QGRAPHICSITEM_H
  39. #include <QtCore/qglobal.h>
  40. #include <QtCore/qobject.h>
  41. #include <QtCore/qvariant.h>
  42. #include <QtCore/qrect.h>
  43. #include <QtGui/qpainterpath.h>
  44. #include <QtGui/qpixmap.h>
  45. class tst_QGraphicsItem;
  46. QT_BEGIN_HEADER
  47. QT_BEGIN_NAMESPACE
  48. QT_MODULE(Gui)
  49. #if !defined(QT_NO_GRAPHICSVIEW) || (QT_EDITION & QT_MODULE_GRAPHICSVIEW) != QT_MODULE_GRAPHICSVIEW
  50. class QBrush;
  51. class QCursor;
  52. class QFocusEvent;
  53. class QGraphicsItemGroup;
  54. class QGraphicsSceneContextMenuEvent;
  55. class QGraphicsSceneDragDropEvent;
  56. class QGraphicsSceneEvent;
  57. class QGraphicsSceneHoverEvent;
  58. class QGraphicsSceneMouseEvent;
  59. class QGraphicsSceneWheelEvent;
  60. class QGraphicsScene;
  61. class QGraphicsWidget;
  62. class QInputMethodEvent;
  63. class QKeyEvent;
  64. class QMatrix;
  65. class QMenu;
  66. class QPainter;
  67. class QPen;
  68. class QPointF;
  69. class QRectF;
  70. class QStyleOptionGraphicsItem;
  71. class QGraphicsItemPrivate;
  72. class Q_GUI_EXPORT QGraphicsItem
  73. {
  74. public:
  75.     enum GraphicsItemFlag {
  76.         ItemIsMovable = 0x1,
  77.         ItemIsSelectable = 0x2,
  78.         ItemIsFocusable = 0x4,
  79.         ItemClipsToShape = 0x8,
  80.         ItemClipsChildrenToShape = 0x10,
  81.         ItemIgnoresTransformations = 0x20
  82.     };
  83.     Q_DECLARE_FLAGS(GraphicsItemFlags, GraphicsItemFlag)
  84.     enum GraphicsItemChange {
  85.         ItemPositionChange,
  86.         ItemMatrixChange,
  87.         ItemVisibleChange,
  88.         ItemEnabledChange,
  89.         ItemSelectedChange,
  90.         ItemParentChange,
  91.         ItemChildAddedChange,
  92.         ItemChildRemovedChange,
  93.         ItemTransformChange,
  94.         ItemPositionHasChanged,
  95.         ItemTransformHasChanged,
  96.         ItemSceneChange,
  97.         ItemVisibleHasChanged,
  98.         ItemEnabledHasChanged,
  99.         ItemSelectedHasChanged,
  100.         ItemParentHasChanged,
  101.         ItemSceneHasChanged,
  102.         ItemCursorChange,
  103.         ItemCursorHasChanged,
  104.         ItemToolTipChange,
  105.         ItemToolTipHasChanged,
  106.         ItemFlagsChange,
  107.         ItemFlagsHaveChanged,
  108.         ItemZValueChange,
  109.         ItemZValueHasChanged
  110.     };
  111.     enum CacheMode {
  112.         NoCache,
  113.         ItemCoordinateCache,
  114.         DeviceCoordinateCache
  115.     };
  116.     QGraphicsItem(QGraphicsItem *parent = 0
  117. #ifndef Q_QDOC
  118.                   // obsolete argument
  119.                   , QGraphicsScene *scene = 0
  120. #endif
  121.         );
  122.     virtual ~QGraphicsItem();
  123.     QGraphicsScene *scene() const;
  124.     QGraphicsItem *parentItem() const;
  125.     QGraphicsItem *topLevelItem() const;
  126.     QGraphicsWidget *parentWidget() const;
  127.     QGraphicsWidget *topLevelWidget() const;
  128.     QGraphicsWidget *window() const;
  129.     void setParentItem(QGraphicsItem *parent);
  130.     QList<QGraphicsItem *> children() const; // ### obsolete
  131.     QList<QGraphicsItem *> childItems() const;
  132.     bool isWidget() const;
  133.     bool isWindow() const;
  134.     QGraphicsItemGroup *group() const;
  135.     void setGroup(QGraphicsItemGroup *group);
  136.     GraphicsItemFlags flags() const;
  137.     void setFlag(GraphicsItemFlag flag, bool enabled = true);
  138.     void setFlags(GraphicsItemFlags flags);
  139.     CacheMode cacheMode() const;
  140.     void setCacheMode(CacheMode mode, const QSize &cacheSize = QSize());
  141. #ifndef QT_NO_TOOLTIP
  142.     QString toolTip() const;
  143.     void setToolTip(const QString &toolTip);
  144. #endif
  145. #ifndef QT_NO_CURSOR
  146.     QCursor cursor() const;
  147.     void setCursor(const QCursor &cursor);
  148.     bool hasCursor() const;
  149.     void unsetCursor();
  150. #endif
  151.     bool isVisible() const;
  152.     bool isVisibleTo(const QGraphicsItem *parent) const;
  153.     void setVisible(bool visible);
  154.     inline void hide() { setVisible(false); }
  155.     inline void show() { setVisible(true); }
  156.     bool isEnabled() const;
  157.     void setEnabled(bool enabled);
  158.     bool isSelected() const;
  159.     void setSelected(bool selected);
  160.     bool acceptDrops() const;
  161.     void setAcceptDrops(bool on);
  162.     Qt::MouseButtons acceptedMouseButtons() const;
  163.     void setAcceptedMouseButtons(Qt::MouseButtons buttons);
  164.     bool acceptsHoverEvents() const; // obsolete
  165.     void setAcceptsHoverEvents(bool enabled); // obsolete
  166.     bool acceptHoverEvents() const;
  167.     void setAcceptHoverEvents(bool enabled);
  168.     bool handlesChildEvents() const;
  169.     void setHandlesChildEvents(bool enabled);
  170.     bool hasFocus() const;
  171.     void setFocus(Qt::FocusReason focusReason = Qt::OtherFocusReason);
  172.     void clearFocus();
  173.     void grabMouse();
  174.     void ungrabMouse();
  175.     void grabKeyboard();
  176.     void ungrabKeyboard();
  177.     // Positioning in scene coordinates
  178.     QPointF pos() const;
  179.     inline qreal x() const { return pos().x(); }
  180.     inline qreal y() const { return pos().y(); }
  181.     QPointF scenePos() const;
  182.     void setPos(const QPointF &pos);
  183.     inline void setPos(qreal x, qreal y);
  184.     inline void moveBy(qreal dx, qreal dy) { setPos(pos().x() + dx, pos().y() + dy); }
  185.     void ensureVisible(const QRectF &rect = QRectF(), int xmargin = 50, int ymargin = 50);
  186.     inline void ensureVisible(qreal x, qreal y, qreal w, qreal h, int xmargin = 50, int ymargin = 50);
  187.     // Local transformation
  188.     QMatrix matrix() const;
  189.     QMatrix sceneMatrix() const;
  190.     void setMatrix(const QMatrix &matrix, bool combine = false);
  191.     void resetMatrix();
  192.     QTransform transform() const;
  193.     QTransform sceneTransform() const;
  194.     QTransform deviceTransform(const QTransform &viewportTransform) const;
  195.     void setTransform(const QTransform &matrix, bool combine = false);
  196.     void resetTransform();
  197.     
  198.     void rotate(qreal angle);
  199.     void scale(qreal sx, qreal sy);
  200.     void shear(qreal sh, qreal sv);
  201.     void translate(qreal dx, qreal dy);
  202.     virtual void advance(int phase);
  203.     // Stacking order
  204.     qreal zValue() const;
  205.     void setZValue(qreal z);
  206.     // Hit test
  207.     virtual QRectF boundingRect() const = 0;
  208.     QRectF childrenBoundingRect() const;
  209.     QRectF sceneBoundingRect() const;
  210.     virtual QPainterPath shape() const;
  211.     virtual bool contains(const QPointF &point) const;
  212.     virtual bool collidesWithItem(const QGraphicsItem *other, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const;
  213.     virtual bool collidesWithPath(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const;
  214.     QList<QGraphicsItem *> collidingItems(Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const;
  215.     bool isObscured() const;
  216.     bool isObscured(const QRectF &rect) const; // ### Qt 5: merge with isObscured(), add QRectF arg to isObscuredBy()
  217.     inline bool isObscured(qreal x, qreal y, qreal w, qreal h) const;
  218.     virtual bool isObscuredBy(const QGraphicsItem *item) const;
  219.     virtual QPainterPath opaqueArea() const;
  220.     QRegion boundingRegion(const QTransform &itemToDeviceTransform) const;
  221.     qreal boundingRegionGranularity() const;
  222.     void setBoundingRegionGranularity(qreal granularity);
  223.     // Drawing
  224.     virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0) = 0;
  225.     void update(const QRectF &rect = QRectF());
  226.     inline void update(qreal x, qreal y, qreal width, qreal height);
  227.     void scroll(qreal dx, qreal dy, const QRectF &rect = QRectF());
  228.     // Coordinate mapping
  229.     QPointF mapToItem(const QGraphicsItem *item, const QPointF &point) const;
  230.     QPointF mapToParent(const QPointF &point) const;
  231.     QPointF mapToScene(const QPointF &point) const;
  232.     QPolygonF mapToItem(const QGraphicsItem *item, const QRectF &rect) const;
  233.     QPolygonF mapToParent(const QRectF &rect) const;
  234.     QPolygonF mapToScene(const QRectF &rect) const;
  235.     QPolygonF mapToItem(const QGraphicsItem *item, const QPolygonF &polygon) const;
  236.     QPolygonF mapToParent(const QPolygonF &polygon) const;
  237.     QPolygonF mapToScene(const QPolygonF &polygon) const;
  238.     QPainterPath mapToItem(const QGraphicsItem *item, const QPainterPath &path) const;
  239.     QPainterPath mapToParent(const QPainterPath &path) const;
  240.     QPainterPath mapToScene(const QPainterPath &path) const;
  241.     QPointF mapFromItem(const QGraphicsItem *item, const QPointF &point) const;
  242.     QPointF mapFromParent(const QPointF &point) const;
  243.     QPointF mapFromScene(const QPointF &point) const;
  244.     QPolygonF mapFromItem(const QGraphicsItem *item, const QRectF &rect) const;
  245.     QPolygonF mapFromParent(const QRectF &rect) const;
  246.     QPolygonF mapFromScene(const QRectF &rect) const;
  247.     QPolygonF mapFromItem(const QGraphicsItem *item, const QPolygonF &polygon) const;
  248.     QPolygonF mapFromParent(const QPolygonF &polygon) const;
  249.     QPolygonF mapFromScene(const QPolygonF &polygon) const;
  250.     QPainterPath mapFromItem(const QGraphicsItem *item, const QPainterPath &path) const;
  251.     QPainterPath mapFromParent(const QPainterPath &path) const;
  252.     QPainterPath mapFromScene(const QPainterPath &path) const;
  253.     inline QPointF mapToItem(const QGraphicsItem *item, qreal x, qreal y) const;
  254.     inline QPointF mapToParent(qreal x, qreal y) const;
  255.     inline QPointF mapToScene(qreal x, qreal y) const;
  256.     inline QPolygonF mapToItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const;
  257.     inline QPolygonF mapToParent(qreal x, qreal y, qreal w, qreal h) const;
  258.     inline QPolygonF mapToScene(qreal x, qreal y, qreal w, qreal h) const;
  259.     inline QPointF mapFromItem(const QGraphicsItem *item, qreal x, qreal y) const;
  260.     inline QPointF mapFromParent(qreal x, qreal y) const;
  261.     inline QPointF mapFromScene(qreal x, qreal y) const;
  262.     inline QPolygonF mapFromItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const;
  263.     inline QPolygonF mapFromParent(qreal x, qreal y, qreal w, qreal h) const;
  264.     inline QPolygonF mapFromScene(qreal x, qreal y, qreal w, qreal h) const;
  265.     bool isAncestorOf(const QGraphicsItem *child) const;
  266.     QGraphicsItem *commonAncestorItem(const QGraphicsItem *other) const;
  267.     bool isUnderMouse() const;
  268.     // Custom data
  269.     QVariant data(int key) const;
  270.     void setData(int key, const QVariant &value);
  271.     enum {
  272.         Type = 1,
  273.         UserType = 65536
  274.     };
  275.     virtual int type() const;
  276.     void installSceneEventFilter(QGraphicsItem *filterItem);
  277.     void removeSceneEventFilter(QGraphicsItem *filterItem);
  278. protected:
  279.     virtual bool sceneEventFilter(QGraphicsItem *watched, QEvent *event);
  280.     virtual bool sceneEvent(QEvent *event);
  281.     virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
  282.     virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event);
  283.     virtual void dragLeaveEvent(QGraphicsSceneDragDropEvent *event);
  284.     virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event);
  285.     virtual void dropEvent(QGraphicsSceneDragDropEvent *event);
  286.     virtual void focusInEvent(QFocusEvent *event);
  287.     virtual void focusOutEvent(QFocusEvent *event);
  288.     virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
  289.     virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
  290.     virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
  291.     virtual void keyPressEvent(QKeyEvent *event);
  292.     virtual void keyReleaseEvent(QKeyEvent *event);
  293.     virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
  294.     virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
  295.     virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
  296.     virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
  297.     virtual void wheelEvent(QGraphicsSceneWheelEvent *event);
  298.     virtual void inputMethodEvent(QInputMethodEvent *event);
  299.     virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
  300.     virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value);
  301.     enum Extension {
  302.         UserExtension = 0x80000000
  303.     };
  304.     virtual bool supportsExtension(Extension extension) const;
  305.     virtual void setExtension(Extension extension, const QVariant &variant);
  306.     virtual QVariant extension(const QVariant &variant) const;
  307. protected:
  308.     QGraphicsItem(QGraphicsItemPrivate &dd,
  309.                   QGraphicsItem *parent, QGraphicsScene *scene);
  310.     QGraphicsItemPrivate *d_ptr;
  311.     void addToIndex();
  312.     void removeFromIndex();
  313.     void prepareGeometryChange();
  314. private:
  315.     Q_DISABLE_COPY(QGraphicsItem)
  316.     Q_DECLARE_PRIVATE(QGraphicsItem)
  317.     friend class QGraphicsItemGroup;
  318.     friend class QGraphicsScene;
  319.     friend class QGraphicsScenePrivate;
  320.     friend class QGraphicsSceneFindItemBspTreeVisitor;
  321.     friend class QGraphicsView;
  322.     friend class QGraphicsViewPrivate;
  323.     friend class QGraphicsWidget;
  324.     friend class ::tst_QGraphicsItem;
  325.     friend bool qt_closestLeaf(const QGraphicsItem *, const QGraphicsItem *);
  326.     friend bool qt_closestItemFirst(const QGraphicsItem *, const QGraphicsItem *);
  327. };
  328. Q_DECLARE_OPERATORS_FOR_FLAGS(QGraphicsItem::GraphicsItemFlags)
  329. inline void QGraphicsItem::setPos(qreal ax, qreal ay)
  330. { setPos(QPointF(ax, ay)); }
  331. inline void QGraphicsItem::ensureVisible(qreal ax, qreal ay, qreal w, qreal h, int xmargin, int ymargin)
  332. { ensureVisible(QRectF(ax, ay, w, h), xmargin, ymargin); }
  333. inline void QGraphicsItem::update(qreal ax, qreal ay, qreal width, qreal height)
  334. { update(QRectF(ax, ay, width, height)); }
  335. inline bool QGraphicsItem::isObscured(qreal ax, qreal ay, qreal w, qreal h) const
  336. { return isObscured(QRectF(ax, ay, w, h)); }
  337. inline QPointF QGraphicsItem::mapToItem(const QGraphicsItem *item, qreal ax, qreal ay) const
  338. { return mapToItem(item, QPointF(ax, ay)); }
  339. inline QPointF QGraphicsItem::mapToParent(qreal ax, qreal ay) const
  340. { return mapToParent(QPointF(ax, ay)); }
  341. inline QPointF QGraphicsItem::mapToScene(qreal ax, qreal ay) const
  342. { return mapToScene(QPointF(ax, ay));  }
  343. inline QPointF QGraphicsItem::mapFromItem(const QGraphicsItem *item, qreal ax, qreal ay) const
  344. { return mapFromItem(item, QPointF(ax, ay)); }
  345. inline QPointF QGraphicsItem::mapFromParent(qreal ax, qreal ay) const
  346. { return mapFromParent(QPointF(ax, ay));  }
  347. inline QPointF QGraphicsItem::mapFromScene(qreal ax, qreal ay) const
  348. { return mapFromScene(QPointF(ax, ay));  }
  349. inline QPolygonF QGraphicsItem::mapToItem(const QGraphicsItem *item, qreal ax, qreal ay, qreal w, qreal h) const
  350. { return mapToItem(item, QRectF(ax, ay, w, h)); }
  351. inline QPolygonF QGraphicsItem::mapToParent(qreal ax, qreal ay, qreal w, qreal h) const
  352. { return mapToParent(QRectF(ax, ay, w, h)); }
  353. inline QPolygonF QGraphicsItem::mapToScene(qreal ax, qreal ay, qreal w, qreal h) const
  354. { return mapToScene(QRectF(ax, ay, w, h)); }
  355. inline QPolygonF QGraphicsItem::mapFromItem(const QGraphicsItem *item, qreal ax, qreal ay, qreal w, qreal h) const
  356. { return mapFromItem(item, QRectF(ax, ay, w, h)); }
  357. inline QPolygonF QGraphicsItem::mapFromParent(qreal ax, qreal ay, qreal w, qreal h) const
  358. { return mapFromParent(QRectF(ax, ay, w, h)); }
  359. inline QPolygonF QGraphicsItem::mapFromScene(qreal ax, qreal ay, qreal w, qreal h) const
  360. { return mapFromScene(QRectF(ax, ay, w, h)); }
  361. class QAbstractGraphicsShapeItemPrivate;
  362. class Q_GUI_EXPORT QAbstractGraphicsShapeItem : public QGraphicsItem
  363. {
  364. public:
  365.     QAbstractGraphicsShapeItem(QGraphicsItem *parent = 0
  366. #ifndef Q_QDOC
  367.                                // obsolete argument
  368.                                , QGraphicsScene *scene = 0
  369. #endif
  370.         );
  371.     ~QAbstractGraphicsShapeItem();
  372.     QPen pen() const;
  373.     void setPen(const QPen &pen);
  374.     QBrush brush() const;
  375.     void setBrush(const QBrush &brush);
  376.     bool isObscuredBy(const QGraphicsItem *item) const;
  377.     QPainterPath opaqueArea() const;
  378. protected:
  379.     QAbstractGraphicsShapeItem(QAbstractGraphicsShapeItemPrivate &dd,
  380.                                QGraphicsItem *parent, QGraphicsScene *scene);
  381. private:
  382.     Q_DISABLE_COPY(QAbstractGraphicsShapeItem)
  383.     Q_DECLARE_PRIVATE(QAbstractGraphicsShapeItem)
  384. };
  385. class QGraphicsPathItemPrivate;
  386. class Q_GUI_EXPORT QGraphicsPathItem : public QAbstractGraphicsShapeItem
  387. {
  388. public:
  389.     QGraphicsPathItem(QGraphicsItem *parent = 0
  390. #ifndef Q_QDOC
  391.                       // obsolete argument
  392.                       , QGraphicsScene *scene = 0
  393. #endif
  394.         );
  395.     QGraphicsPathItem(const QPainterPath &path, QGraphicsItem *parent = 0
  396. #ifndef Q_QDOC
  397.                       // obsolete argument
  398.                       , QGraphicsScene *scene = 0
  399. #endif
  400.         );
  401.     ~QGraphicsPathItem();
  402.     QPainterPath path() const;
  403.     void setPath(const QPainterPath &path);
  404.     QRectF boundingRect() const;
  405.     QPainterPath shape() const;
  406.     bool contains(const QPointF &point) const;
  407.     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
  408.     bool isObscuredBy(const QGraphicsItem *item) const;
  409.     QPainterPath opaqueArea() const;
  410.     enum { Type = 2 };
  411.     int type() const;
  412. protected:
  413.     bool supportsExtension(Extension extension) const;
  414.     void setExtension(Extension extension, const QVariant &variant);
  415.     QVariant extension(const QVariant &variant) const;
  416. private:
  417.     Q_DISABLE_COPY(QGraphicsPathItem)
  418.     Q_DECLARE_PRIVATE(QGraphicsPathItem)
  419. };
  420. class QGraphicsRectItemPrivate;
  421. class Q_GUI_EXPORT QGraphicsRectItem : public QAbstractGraphicsShapeItem
  422. {
  423. public:
  424.     QGraphicsRectItem(QGraphicsItem *parent = 0
  425. #ifndef Q_QDOC
  426.                       // obsolete argument
  427.                       , QGraphicsScene *scene = 0
  428. #endif
  429.         );
  430.     QGraphicsRectItem(const QRectF &rect, QGraphicsItem *parent = 0
  431. #ifndef Q_QDOC
  432.                       // obsolete argument
  433.                       , QGraphicsScene *scene = 0
  434. #endif
  435.         );
  436.     QGraphicsRectItem(qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent = 0
  437. #ifndef Q_QDOC
  438.                       // obsolete argument
  439.                       , QGraphicsScene *scene = 0
  440. #endif
  441.         );
  442.     ~QGraphicsRectItem();
  443.     QRectF rect() const;
  444.     void setRect(const QRectF &rect);
  445.     inline void setRect(qreal x, qreal y, qreal w, qreal h);
  446.     QRectF boundingRect() const;
  447.     QPainterPath shape() const;
  448.     bool contains(const QPointF &point) const;
  449.     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
  450.     bool isObscuredBy(const QGraphicsItem *item) const;
  451.     QPainterPath opaqueArea() const;
  452.     enum { Type = 3 };
  453.     int type() const;
  454. protected:
  455.     bool supportsExtension(Extension extension) const;
  456.     void setExtension(Extension extension, const QVariant &variant);
  457.     QVariant extension(const QVariant &variant) const;
  458. private:
  459.     Q_DISABLE_COPY(QGraphicsRectItem)
  460.     Q_DECLARE_PRIVATE(QGraphicsRectItem)
  461. };
  462. inline void QGraphicsRectItem::setRect(qreal ax, qreal ay, qreal w, qreal h)
  463. { setRect(QRectF(ax, ay, w, h)); }
  464. class QGraphicsEllipseItemPrivate;
  465. class Q_GUI_EXPORT QGraphicsEllipseItem : public QAbstractGraphicsShapeItem
  466. {
  467. public:
  468.     QGraphicsEllipseItem(QGraphicsItem *parent = 0
  469. #ifndef Q_QDOC
  470.                          // obsolete argument
  471.                          , QGraphicsScene *scene = 0
  472. #endif
  473.         );
  474.     QGraphicsEllipseItem(const QRectF &rect, QGraphicsItem *parent = 0
  475. #ifndef Q_QDOC
  476.                          // obsolete argument
  477.                          , QGraphicsScene *scene = 0
  478. #endif
  479.         );
  480.     QGraphicsEllipseItem(qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent = 0
  481. #ifndef Q_QDOC
  482.                          // obsolete argument
  483.                          , QGraphicsScene *scene = 0
  484. #endif
  485.         );
  486.     ~QGraphicsEllipseItem();
  487.     QRectF rect() const;
  488.     void setRect(const QRectF &rect);
  489.     inline void setRect(qreal x, qreal y, qreal w, qreal h);
  490.     int startAngle() const;
  491.     void setStartAngle(int angle);
  492.     int spanAngle() const;
  493.     void setSpanAngle(int angle);
  494.     QRectF boundingRect() const;
  495.     QPainterPath shape() const;
  496.     bool contains(const QPointF &point) const;
  497.     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
  498.     bool isObscuredBy(const QGraphicsItem *item) const;
  499.     QPainterPath opaqueArea() const;
  500.     enum { Type = 4 };
  501.     int type() const;
  502. protected:
  503.     bool supportsExtension(Extension extension) const;
  504.     void setExtension(Extension extension, const QVariant &variant);
  505.     QVariant extension(const QVariant &variant) const;
  506. private:
  507.     Q_DISABLE_COPY(QGraphicsEllipseItem)
  508.     Q_DECLARE_PRIVATE(QGraphicsEllipseItem)
  509. };
  510. inline void QGraphicsEllipseItem::setRect(qreal ax, qreal ay, qreal w, qreal h)
  511. { setRect(QRectF(ax, ay, w, h)); }
  512. class QGraphicsPolygonItemPrivate;
  513. class Q_GUI_EXPORT QGraphicsPolygonItem : public QAbstractGraphicsShapeItem
  514. {
  515. public:
  516.     QGraphicsPolygonItem(QGraphicsItem *parent = 0
  517. #ifndef Q_QDOC
  518.                          // obsolete argument
  519.                          , QGraphicsScene *scene = 0
  520. #endif
  521.         );
  522.     QGraphicsPolygonItem(const QPolygonF &polygon,
  523.                          QGraphicsItem *parent = 0
  524. #ifndef Q_QDOC
  525.                          // obsolete argument
  526.                          , QGraphicsScene *scene = 0
  527. #endif
  528.         );
  529.     ~QGraphicsPolygonItem();
  530.     QPolygonF polygon() const;
  531.     void setPolygon(const QPolygonF &polygon);
  532.     Qt::FillRule fillRule() const;
  533.     void setFillRule(Qt::FillRule rule);
  534.     QRectF boundingRect() const;
  535.     QPainterPath shape() const;
  536.     bool contains(const QPointF &point) const;
  537.     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
  538.     bool isObscuredBy(const QGraphicsItem *item) const;
  539.     QPainterPath opaqueArea() const;
  540.     enum { Type = 5 };
  541.     int type() const;
  542. protected:
  543.     bool supportsExtension(Extension extension) const;
  544.     void setExtension(Extension extension, const QVariant &variant);
  545.     QVariant extension(const QVariant &variant) const;
  546. private:
  547.     Q_DISABLE_COPY(QGraphicsPolygonItem)
  548.     Q_DECLARE_PRIVATE(QGraphicsPolygonItem)
  549. };
  550. class QGraphicsLineItemPrivate;
  551. class Q_GUI_EXPORT QGraphicsLineItem : public QGraphicsItem
  552. {
  553. public:
  554.     QGraphicsLineItem(QGraphicsItem *parent = 0
  555. #ifndef Q_QDOC
  556.                       // obsolete argument
  557.                       , QGraphicsScene *scene = 0
  558. #endif
  559.         );
  560.     QGraphicsLineItem(const QLineF &line, QGraphicsItem *parent = 0
  561. #ifndef Q_QDOC
  562.                       // obsolete argument
  563.                       , QGraphicsScene *scene = 0
  564. #endif
  565.         );
  566.     QGraphicsLineItem(qreal x1, qreal y1, qreal x2, qreal y2, QGraphicsItem *parent = 0
  567. #ifndef Q_QDOC
  568.                       // obsolete argument
  569.                       , QGraphicsScene *scene = 0
  570. #endif
  571.         );
  572.     ~QGraphicsLineItem();
  573.     QPen pen() const;
  574.     void setPen(const QPen &pen);
  575.     QLineF line() const;
  576.     void setLine(const QLineF &line);
  577.     inline void setLine(qreal x1, qreal y1, qreal x2, qreal y2)
  578.     { setLine(QLineF(x1, y1, x2, y2)); }
  579.     QRectF boundingRect() const;
  580.     QPainterPath shape() const;
  581.     bool contains(const QPointF &point) const;
  582.     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
  583.     bool isObscuredBy(const QGraphicsItem *item) const;
  584.     QPainterPath opaqueArea() const;
  585.     enum { Type = 6 };
  586.     int type() const;
  587. protected:
  588.     bool supportsExtension(Extension extension) const;
  589.     void setExtension(Extension extension, const QVariant &variant);
  590.     QVariant extension(const QVariant &variant) const;
  591. private:
  592.     Q_DISABLE_COPY(QGraphicsLineItem)
  593.     Q_DECLARE_PRIVATE(QGraphicsLineItem)
  594. };
  595. class QGraphicsPixmapItemPrivate;
  596. class Q_GUI_EXPORT QGraphicsPixmapItem : public QGraphicsItem
  597. {
  598. public:
  599.     enum ShapeMode {
  600.         MaskShape,
  601.         BoundingRectShape,
  602.         HeuristicMaskShape
  603.     };
  604.     QGraphicsPixmapItem(QGraphicsItem *parent = 0
  605. #ifndef Q_QDOC
  606.                         // obsolete argument
  607.                         , QGraphicsScene *scene = 0
  608. #endif
  609.         );
  610.     QGraphicsPixmapItem(const QPixmap &pixmap, QGraphicsItem *parent = 0
  611. #ifndef Q_QDOC
  612.                         // obsolete argument
  613.                         , QGraphicsScene *scene = 0
  614. #endif
  615.         );
  616.     ~QGraphicsPixmapItem();
  617.     QPixmap pixmap() const;
  618.     void setPixmap(const QPixmap &pixmap);
  619.     Qt::TransformationMode transformationMode() const;
  620.     void setTransformationMode(Qt::TransformationMode mode);
  621.     QPointF offset() const;
  622.     void setOffset(const QPointF &offset);
  623.     inline void setOffset(qreal x, qreal y);
  624.     QRectF boundingRect() const;
  625.     QPainterPath shape() const;
  626.     bool contains(const QPointF &point) const;
  627.     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
  628.     bool isObscuredBy(const QGraphicsItem *item) const;
  629.     QPainterPath opaqueArea() const;
  630.     enum { Type = 7 };
  631.     int type() const;
  632.     ShapeMode shapeMode() const;
  633.     void setShapeMode(ShapeMode mode);
  634. protected:
  635.     bool supportsExtension(Extension extension) const;
  636.     void setExtension(Extension extension, const QVariant &variant);
  637.     QVariant extension(const QVariant &variant) const;
  638. private:
  639.     Q_DISABLE_COPY(QGraphicsPixmapItem)
  640.     Q_DECLARE_PRIVATE(QGraphicsPixmapItem)
  641. };
  642. inline void QGraphicsPixmapItem::setOffset(qreal ax, qreal ay)
  643. { setOffset(QPointF(ax, ay)); }
  644. class QGraphicsTextItemPrivate;
  645. class QTextDocument;
  646. class QTextCursor;
  647. class Q_GUI_EXPORT QGraphicsTextItem : public QObject, public QGraphicsItem
  648. {
  649.     Q_OBJECT
  650.     QDOC_PROPERTY(bool openExternalLinks READ openExternalLinks WRITE setOpenExternalLinks)
  651.     QDOC_PROPERTY(QTextCursor textCursor READ textCursor WRITE setTextCursor)
  652. public:
  653.     QGraphicsTextItem(QGraphicsItem *parent = 0
  654. #ifndef Q_QDOC
  655.                       // obsolete argument
  656.                       , QGraphicsScene *scene = 0
  657. #endif
  658.         );
  659.     QGraphicsTextItem(const QString &text, QGraphicsItem *parent = 0
  660. #ifndef Q_QDOC
  661.                       // obsolete argument
  662.                       , QGraphicsScene *scene = 0
  663. #endif
  664.         );
  665.     ~QGraphicsTextItem();
  666.     QString toHtml() const;
  667.     void setHtml(const QString &html);
  668.     QString toPlainText() const;
  669.     void setPlainText(const QString &text);
  670.     QFont font() const;
  671.     void setFont(const QFont &font);
  672.     void setDefaultTextColor(const QColor &c);
  673.     QColor defaultTextColor() const;
  674.     QRectF boundingRect() const;
  675.     QPainterPath shape() const;
  676.     bool contains(const QPointF &point) const;
  677.     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
  678.     bool isObscuredBy(const QGraphicsItem *item) const;
  679.     QPainterPath opaqueArea() const;
  680.     enum { Type = 8 };
  681.     int type() const;
  682.     void setTextWidth(qreal width);
  683.     qreal textWidth() const;
  684.     void adjustSize();
  685.     void setDocument(QTextDocument *document);
  686.     QTextDocument *document() const;
  687.     void setTextInteractionFlags(Qt::TextInteractionFlags flags);
  688.     Qt::TextInteractionFlags textInteractionFlags() const;
  689.     void setOpenExternalLinks(bool open);
  690.     bool openExternalLinks() const;
  691.     void setTextCursor(const QTextCursor &cursor);
  692.     QTextCursor textCursor() const;
  693. Q_SIGNALS:
  694.     void linkActivated(const QString &);
  695.     void linkHovered(const QString &);
  696. protected:
  697.     bool sceneEvent(QEvent *event);
  698.     void mousePressEvent(QGraphicsSceneMouseEvent *event);
  699.     void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
  700.     void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
  701.     void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
  702.     void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
  703.     void keyPressEvent(QKeyEvent *event);
  704.     void keyReleaseEvent(QKeyEvent *event);
  705.     void focusInEvent(QFocusEvent *event);
  706.     void focusOutEvent(QFocusEvent *event);
  707.     void dragEnterEvent(QGraphicsSceneDragDropEvent *event);
  708.     void dragLeaveEvent(QGraphicsSceneDragDropEvent *event);
  709.     void dragMoveEvent(QGraphicsSceneDragDropEvent *event);
  710.     void dropEvent(QGraphicsSceneDragDropEvent *event);
  711.     void inputMethodEvent(QInputMethodEvent *event);
  712.     void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
  713.     void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
  714.     void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
  715.     QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
  716.     bool supportsExtension(Extension extension) const;
  717.     void setExtension(Extension extension, const QVariant &variant);
  718.     QVariant extension(const QVariant &variant) const;
  719. private:
  720.     Q_DISABLE_COPY(QGraphicsTextItem)
  721.     Q_PRIVATE_SLOT(dd, void _q_updateBoundingRect(const QSizeF &))
  722.     Q_PRIVATE_SLOT(dd, void _q_update(QRectF))
  723.     Q_PRIVATE_SLOT(dd, void _q_ensureVisible(QRectF))
  724.     QGraphicsTextItemPrivate *dd;
  725.     friend class QGraphicsTextItemPrivate;
  726. };
  727. class QGraphicsSimpleTextItemPrivate;
  728. class Q_GUI_EXPORT QGraphicsSimpleTextItem : public QAbstractGraphicsShapeItem
  729. {
  730. public:
  731.     QGraphicsSimpleTextItem(QGraphicsItem *parent = 0
  732. #ifndef Q_QDOC
  733.                             // obsolete argument
  734.                             , QGraphicsScene *scene = 0
  735. #endif
  736.         );
  737.     QGraphicsSimpleTextItem(const QString &text, QGraphicsItem *parent = 0
  738. #ifndef Q_QDOC
  739.                             // obsolete argument
  740.                             , QGraphicsScene *scene = 0
  741. #endif
  742.         );
  743.     ~QGraphicsSimpleTextItem();
  744.     void setText(const QString &text);
  745.     QString text() const;
  746.     void setFont(const QFont &font);
  747.     QFont font() const;
  748.     QRectF boundingRect() const;
  749.     QPainterPath shape() const;
  750.     bool contains(const QPointF &point) const;
  751.     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
  752.     bool isObscuredBy(const QGraphicsItem *item) const;
  753.     QPainterPath opaqueArea() const;
  754.     enum { Type = 9 };
  755.     int type() const;
  756. protected:
  757.     bool supportsExtension(Extension extension) const;
  758.     void setExtension(Extension extension, const QVariant &variant);
  759.     QVariant extension(const QVariant &variant) const;
  760. private:
  761.     Q_DISABLE_COPY(QGraphicsSimpleTextItem)
  762.     Q_DECLARE_PRIVATE(QGraphicsSimpleTextItem)
  763. };
  764. class QGraphicsItemGroupPrivate;
  765. class Q_GUI_EXPORT QGraphicsItemGroup : public QGraphicsItem
  766. {
  767. public:
  768.     QGraphicsItemGroup(QGraphicsItem *parent = 0
  769. #ifndef Q_QDOC
  770.                        // obsolete argument
  771.                        , QGraphicsScene *scene = 0
  772. #endif
  773.         );
  774.     ~QGraphicsItemGroup();
  775.     void addToGroup(QGraphicsItem *item);
  776.     void removeFromGroup(QGraphicsItem *item);
  777.     QRectF boundingRect() const;
  778.     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
  779.     bool isObscuredBy(const QGraphicsItem *item) const;
  780.     QPainterPath opaqueArea() const;
  781.     enum { Type = 10 };
  782.     int type() const;
  783. private:
  784.     Q_DISABLE_COPY(QGraphicsItemGroup)
  785.     Q_DECLARE_PRIVATE(QGraphicsItemGroup)
  786. };
  787. template <class T> inline T qgraphicsitem_cast(QGraphicsItem *item)
  788. {
  789.     return int(static_cast<T>(0)->Type) == int(QGraphicsItem::Type)
  790.         || (item && int(static_cast<T>(0)->Type) == item->type()) ? static_cast<T>(item) : 0;
  791. }
  792. template <class T> inline T qgraphicsitem_cast(const QGraphicsItem *item)
  793. {
  794.     return int(static_cast<T>(0)->Type) == int(QGraphicsItem::Type)
  795.         || (item && int(static_cast<T>(0)->Type) == item->type()) ? static_cast<T>(item) : 0;
  796. }
  797. #ifndef QT_NO_DEBUG_STREAM
  798. Q_GUI_EXPORT QDebug operator<<(QDebug debug, QGraphicsItem *item);
  799. Q_GUI_EXPORT QDebug operator<<(QDebug debug, QGraphicsItem::GraphicsItemChange change);
  800. #endif
  801. QT_END_NAMESPACE
  802. Q_DECLARE_METATYPE(QGraphicsItem *)
  803. Q_DECLARE_METATYPE(QGraphicsScene *)
  804. QT_END_HEADER
  805. #endif
  806. #endif // QT_NO_GRAPHICSVIEW