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

系统编程

开发平台:

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 QGRAPHICSVIEW_H
  38. #define QGRAPHICSVIEW_H
  39. #include <QtCore/qmetatype.h>
  40. #include <QtGui/qpainter.h>
  41. #include <QtGui/qscrollarea.h>
  42. #include <QtGui/qgraphicsscene.h>
  43. QT_BEGIN_HEADER
  44. QT_BEGIN_NAMESPACE
  45. QT_MODULE(Gui)
  46. #if !defined(QT_NO_GRAPHICSVIEW) || (QT_EDITION & QT_MODULE_GRAPHICSVIEW) != QT_MODULE_GRAPHICSVIEW
  47. class QGraphicsItem;
  48. class QPainterPath;
  49. class QPolygonF;
  50. class QStyleOptionGraphicsItem;
  51. class QGraphicsViewPrivate;
  52. class Q_GUI_EXPORT QGraphicsView : public QAbstractScrollArea
  53. {
  54.     Q_OBJECT
  55.     Q_FLAGS(QPainter::RenderHints CacheMode OptimizationFlags)
  56.     Q_ENUMS(ViewportAnchor DragMode ViewportUpdateMode)
  57.     Q_PROPERTY(QBrush backgroundBrush READ backgroundBrush WRITE setBackgroundBrush)
  58.     Q_PROPERTY(QBrush foregroundBrush READ foregroundBrush WRITE setForegroundBrush)
  59.     Q_PROPERTY(bool interactive READ isInteractive WRITE setInteractive)
  60.     Q_PROPERTY(QRectF sceneRect READ sceneRect WRITE setSceneRect)
  61.     Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment)
  62.     Q_PROPERTY(QPainter::RenderHints renderHints READ renderHints WRITE setRenderHints)
  63.     Q_PROPERTY(DragMode dragMode READ dragMode WRITE setDragMode)
  64.     Q_PROPERTY(CacheMode cacheMode READ cacheMode WRITE setCacheMode)
  65.     Q_PROPERTY(ViewportAnchor transformationAnchor READ transformationAnchor WRITE setTransformationAnchor)
  66.     Q_PROPERTY(ViewportAnchor resizeAnchor READ resizeAnchor WRITE setResizeAnchor)
  67.     Q_PROPERTY(ViewportUpdateMode viewportUpdateMode READ viewportUpdateMode WRITE setViewportUpdateMode)
  68. #ifndef QT_NO_RUBBERBAND
  69.     Q_PROPERTY(Qt::ItemSelectionMode rubberBandSelectionMode READ rubberBandSelectionMode WRITE setRubberBandSelectionMode)
  70. #endif
  71.     Q_PROPERTY(OptimizationFlags optimizationFlags READ optimizationFlags WRITE setOptimizationFlags)
  72. public:
  73.     enum ViewportAnchor {
  74.         NoAnchor,
  75.         AnchorViewCenter,
  76.         AnchorUnderMouse
  77.     };
  78.     enum CacheModeFlag {
  79.         CacheNone = 0x0,
  80.         CacheBackground = 0x1
  81.     };
  82.     Q_DECLARE_FLAGS(CacheMode, CacheModeFlag)
  83.     enum DragMode {
  84.         NoDrag,
  85.         ScrollHandDrag,
  86.         RubberBandDrag
  87.     };
  88.     enum ViewportUpdateMode {
  89.         FullViewportUpdate,
  90.         MinimalViewportUpdate,
  91.         SmartViewportUpdate,
  92.         NoViewportUpdate,
  93.         BoundingRectViewportUpdate
  94.     };
  95.     enum OptimizationFlag {
  96.         DontClipPainter = 0x1,
  97.         DontSavePainterState = 0x2,
  98.         DontAdjustForAntialiasing = 0x4
  99.     };
  100.     Q_DECLARE_FLAGS(OptimizationFlags, OptimizationFlag)
  101.     QGraphicsView(QWidget *parent = 0);
  102.     QGraphicsView(QGraphicsScene *scene, QWidget *parent = 0);
  103.     ~QGraphicsView();
  104.     QSize sizeHint() const;
  105.     QPainter::RenderHints renderHints() const;
  106.     void setRenderHint(QPainter::RenderHint hint, bool enabled = true);
  107.     void setRenderHints(QPainter::RenderHints hints);
  108.     Qt::Alignment alignment() const;
  109.     void setAlignment(Qt::Alignment alignment);
  110.     ViewportAnchor transformationAnchor() const;
  111.     void setTransformationAnchor(ViewportAnchor anchor);
  112.     ViewportAnchor resizeAnchor() const;
  113.     void setResizeAnchor(ViewportAnchor anchor);
  114.     ViewportUpdateMode viewportUpdateMode() const;
  115.     void setViewportUpdateMode(ViewportUpdateMode mode);
  116.     OptimizationFlags optimizationFlags() const;
  117.     void setOptimizationFlag(OptimizationFlag flag, bool enabled = true);
  118.     void setOptimizationFlags(OptimizationFlags flags);
  119.     DragMode dragMode() const;
  120.     void setDragMode(DragMode mode);
  121. #ifndef QT_NO_RUBBERBAND
  122.     Qt::ItemSelectionMode rubberBandSelectionMode() const;
  123.     void setRubberBandSelectionMode(Qt::ItemSelectionMode mode);
  124. #endif
  125.     CacheMode cacheMode() const;
  126.     void setCacheMode(CacheMode mode);
  127.     void resetCachedContent();
  128.     bool isInteractive() const;
  129.     void setInteractive(bool allowed);
  130.     QGraphicsScene *scene() const;
  131.     void setScene(QGraphicsScene *scene);
  132.     QRectF sceneRect() const;
  133.     void setSceneRect(const QRectF &rect);
  134.     inline void setSceneRect(qreal x, qreal y, qreal w, qreal h);
  135.     QMatrix matrix() const;
  136.     void setMatrix(const QMatrix &matrix, bool combine = false);
  137.     void resetMatrix();
  138.     QTransform transform() const;
  139.     QTransform viewportTransform() const;
  140.     void setTransform(const QTransform &matrix, bool combine = false);
  141.     void resetTransform();
  142.     void rotate(qreal angle);
  143.     void scale(qreal sx, qreal sy);
  144.     void shear(qreal sh, qreal sv);
  145.     void translate(qreal dx, qreal dy);
  146.     void centerOn(const QPointF &pos);
  147.     inline void centerOn(qreal x, qreal y);
  148.     void centerOn(const QGraphicsItem *item);
  149.     void ensureVisible(const QRectF &rect, int xmargin = 50, int ymargin = 50);
  150.     inline void ensureVisible(qreal x, qreal y, qreal w, qreal h, int xmargin = 50, int ymargin = 50);
  151.     void ensureVisible(const QGraphicsItem *item, int xmargin = 50, int ymargin = 50);
  152.     void fitInView(const QRectF &rect, Qt::AspectRatioMode aspectRadioMode = Qt::IgnoreAspectRatio);
  153.     inline void fitInView(qreal x, qreal y, qreal w, qreal h,
  154.                           Qt::AspectRatioMode aspectRadioMode = Qt::IgnoreAspectRatio);
  155.     void fitInView(const QGraphicsItem *item,
  156.                    Qt::AspectRatioMode aspectRadioMode = Qt::IgnoreAspectRatio);
  157.     void render(QPainter *painter, const QRectF &target = QRectF(), const QRect &source = QRect(),
  158.                 Qt::AspectRatioMode aspectRatioMode = Qt::KeepAspectRatio);
  159.     QList<QGraphicsItem *> items() const;
  160.     QList<QGraphicsItem *> items(const QPoint &pos) const;
  161.     inline QList<QGraphicsItem *> items(int x, int y) const;
  162.     QList<QGraphicsItem *> items(const QRect &rect, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const;
  163.     inline QList<QGraphicsItem *> items(int x, int y, int w, int h, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const;
  164.     QList<QGraphicsItem *> items(const QPolygon &polygon, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const;
  165.     QList<QGraphicsItem *> items(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const;
  166.     QGraphicsItem *itemAt(const QPoint &pos) const;
  167.     inline QGraphicsItem *itemAt(int x, int y) const;
  168.     QPointF mapToScene(const QPoint &point) const;
  169.     QPolygonF mapToScene(const QRect &rect) const;
  170.     QPolygonF mapToScene(const QPolygon &polygon) const;
  171.     QPainterPath mapToScene(const QPainterPath &path) const;
  172.     QPoint mapFromScene(const QPointF &point) const;
  173.     QPolygon mapFromScene(const QRectF &rect) const;
  174.     QPolygon mapFromScene(const QPolygonF &polygon) const;
  175.     QPainterPath mapFromScene(const QPainterPath &path) const;
  176.     inline QPointF mapToScene(int x, int y) const;
  177.     inline QPolygonF mapToScene(int x, int y, int w, int h) const;
  178.     inline QPoint mapFromScene(qreal x, qreal y) const;
  179.     inline QPolygon mapFromScene(qreal x, qreal y, qreal w, qreal h) const;
  180.     QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
  181.     QBrush backgroundBrush() const;
  182.     void setBackgroundBrush(const QBrush &brush);
  183.     QBrush foregroundBrush() const;
  184.     void setForegroundBrush(const QBrush &brush);
  185. public Q_SLOTS:
  186.     void updateScene(const QList<QRectF> &rects);
  187.     void invalidateScene(const QRectF &rect = QRectF(), QGraphicsScene::SceneLayers layers = QGraphicsScene::AllLayers);
  188.     void updateSceneRect(const QRectF &rect);
  189. protected Q_SLOTS:
  190.     void setupViewport(QWidget *widget);
  191. protected:
  192.     bool event(QEvent *event);
  193.     bool viewportEvent(QEvent *event);
  194. #ifndef QT_NO_CONTEXTMENU
  195.     void contextMenuEvent(QContextMenuEvent *event);
  196. #endif
  197.     void dragEnterEvent(QDragEnterEvent *event);
  198.     void dragLeaveEvent(QDragLeaveEvent *event);
  199.     void dragMoveEvent(QDragMoveEvent *event);
  200.     void dropEvent(QDropEvent *event);
  201.     void focusInEvent(QFocusEvent *event);
  202.     bool focusNextPrevChild(bool next);
  203.     void focusOutEvent(QFocusEvent *event);
  204.     void keyPressEvent(QKeyEvent *event);
  205.     void keyReleaseEvent(QKeyEvent *event);
  206.     void mouseDoubleClickEvent(QMouseEvent *event);
  207.     void mousePressEvent(QMouseEvent *event);
  208.     void mouseMoveEvent(QMouseEvent *event);
  209.     void mouseReleaseEvent(QMouseEvent *event);
  210. #ifndef QT_NO_WHEELEVENT
  211.     void wheelEvent(QWheelEvent *event);
  212. #endif
  213.     void paintEvent(QPaintEvent *event);
  214.     void resizeEvent(QResizeEvent *event);
  215.     void scrollContentsBy(int dx, int dy);
  216.     void showEvent(QShowEvent *event);
  217.     void inputMethodEvent(QInputMethodEvent *event);
  218.     virtual void drawBackground(QPainter *painter, const QRectF &rect);
  219.     virtual void drawForeground(QPainter *painter, const QRectF &rect);
  220.     virtual void drawItems(QPainter *painter, int numItems,
  221.                            QGraphicsItem *items[],
  222.                            const QStyleOptionGraphicsItem options[]);
  223. private:
  224.     Q_DECLARE_PRIVATE(QGraphicsView)
  225.     Q_DISABLE_COPY(QGraphicsView)
  226. #ifndef QT_NO_CURSOR
  227.     Q_PRIVATE_SLOT(d_func(), void _q_setViewportCursor(const QCursor &))
  228.     Q_PRIVATE_SLOT(d_func(), void _q_unsetViewportCursor())
  229. #endif
  230.     friend class QGraphicsSceneWidget;
  231.     friend class QGraphicsScene;
  232. };
  233. Q_DECLARE_OPERATORS_FOR_FLAGS(QGraphicsView::CacheMode)
  234. Q_DECLARE_OPERATORS_FOR_FLAGS(QGraphicsView::OptimizationFlags)
  235. inline void QGraphicsView::setSceneRect(qreal ax, qreal ay, qreal aw, qreal ah)
  236. { setSceneRect(QRectF(ax, ay, aw, ah)); }
  237. inline void QGraphicsView::centerOn(qreal ax, qreal ay)
  238. { centerOn(QPointF(ax, ay)); }
  239. inline void QGraphicsView::ensureVisible(qreal ax, qreal ay, qreal aw, qreal ah, int xmargin, int ymargin)
  240. { ensureVisible(QRectF(ax, ay, aw, ah), xmargin, ymargin); }
  241. inline void QGraphicsView::fitInView(qreal ax, qreal ay, qreal w, qreal h, Qt::AspectRatioMode mode)
  242. { fitInView(QRectF(ax, ay, w, h), mode); }
  243. inline QList<QGraphicsItem *> QGraphicsView::items(int ax, int ay) const
  244. { return items(QPoint(ax, ay)); }
  245. inline QList<QGraphicsItem *> QGraphicsView::items(int ax, int ay, int w, int h, Qt::ItemSelectionMode mode) const
  246. { return items(QRect(ax, ay, w, h), mode); }
  247. inline QGraphicsItem *QGraphicsView::itemAt(int ax, int ay) const
  248. { return itemAt(QPoint(ax, ay)); }
  249. inline QPointF QGraphicsView::mapToScene(int ax, int ay) const
  250. { return mapToScene(QPoint(ax, ay)); }
  251. inline QPolygonF QGraphicsView::mapToScene(int ax, int ay, int w, int h) const
  252. { return mapToScene(QRect(ax, ay, w, h)); }
  253. inline QPoint QGraphicsView::mapFromScene(qreal ax, qreal ay) const
  254. { return mapFromScene(QPointF(ax, ay)); }
  255. inline QPolygon QGraphicsView::mapFromScene(qreal ax, qreal ay, qreal w, qreal h) const
  256. { return mapFromScene(QRectF(ax, ay, w, h)); }
  257. #endif // QT_NO_GRAPHICSVIEW
  258. QT_END_NAMESPACE
  259. QT_END_HEADER
  260. #endif // QGRAPHICSVIEW_H