目录
使用
头文件: | #include <QGraphicsView> |
配置: | QT += widgets |
初始版本: | Qt 4.2 |
基类: | QAbstractScrollArea |
构造函数
QGraphicsView::QGraphicsView(QWidget *parent = nullptr);
QGraphicsView::QGraphicsView(QGraphicsScene *scene, QWidget *parent = nullptr);
枚举
//当用户调整视图大小或转换视图时QGraphicsView可以使用的锚点
enum ViewportAnchor {
NoAnchor,//没有锚点,即视图使场景的位置保持不变
AnchorViewCenter,//视图中心的场景点用作锚点
AnchorUnderMouse//鼠标下方的点用作锚点
};
//缓存模式
enum CacheModeFlag {
CacheNone = 0x0,//所有绘画都直接在视口上完成
CacheBackground = 0x1//后台被缓存
};
//在视口上按下并拖动鼠标时视图的默认操作
enum DragMode {
NoDrag,//没发生什么事; 鼠标事件将被忽略
ScrollHandDrag,//光标变为指点,然后拖动鼠标将滚动滚动条
RubberBandDrag//出现橡皮筋。拖动鼠标将设置橡皮筋的几何形状,并选中橡皮筋覆盖的所有项目
};
//当场景内容更改或公开时QGraphicsView如何更新其视口
enum ViewportUpdateMode {
FullViewportUpdate,//更新整个视口
MinimalViewportUpdate,//确定需要重绘的最小视口区域
SmartViewportUpdate,//过分析需要重绘的区域来尝试找到最佳的更新模式
NoViewportUpdate,//视口中所有更改的边界矩形将被重绘
BoundingRectViewportUpdate//永远不会更新其视
};
//呈现性能
enum OptimizationFlag {
DontClipPainter = 0x1, // 此值已过时,并且无效
DontSavePainterState = 0x2,//渲染背景或前景以及渲染每个项目时会保护画家状态
DontAdjustForAntialiasing = 0x4,//禁用抗锯齿自动调整功能
IndirectPainting = 0x8//仅用于与旧代码兼容
};
属性
//设置场景坐标或项目在视图中居中
void centerOn(const QPointF &pos);
void centerOn(qreal x, qreal y);
void centerOn(const QGraphicsItem *item);
//确保场景坐标或项目在视图中可见
void ensureVisible(const QRectF &rect, int xmargin = 50, int ymargin = 50);
void ensureVisible(qreal x, qreal y, qreal w, qreal h, int xmargin = 50, int ymargin = 50);
void ensureVisible(const QGraphicsItem *item, int xmargin = 50, int ymargin = 50);
//设置区域或项目在视图中显示
void fitInView(const QRectF &rect, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio);
void fitInView(qreal x, qreal y, qreal w, qreal h, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio);
void fitInView(const QGraphicsItem *item, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio);
//视图坐标转换为场景坐标
QPointF mapToScene(const QPoint &point) const;
QPolygonF mapToScene(const QRect &rect) const;
QPolygonF mapToScene(const QPolygon &polygon) const;
QPainterPath mapToScene(const QPainterPath &path) const;
QPointF mapToScene(int x, int y) const;
QPolygonF mapToScene(int x, int y, int w, int h) const;
//场景坐标转换回视图坐标
QPoint mapFromScene(const QPointF &point) const;
QPolygon mapFromScene(const QRectF &rect) const;
QPolygon mapFromScene(const QPolygonF &polygon) const;
QPainterPath mapFromScene(const QPainterPath &path) const;
QPoint mapFromScene(qreal x, qreal y) const;
QPolygon mapFromScene(qreal x, qreal y, qreal w, qreal h) const;
属性方法
//场景在视图中的对齐方式
Qt::Alignment alignment() const;
void setAlignment(Qt::Alignment alignment);
//背景画刷
QBrush backgroundBrush() const;
void setBackgroundBrush(const QBrush &brush);
//前景画刷
QBrush foregroundBrush() const;
void setForegroundBrush(const QBrush);
//缓存模式
QGraphicsView::CacheMode cacheMode() const;
void setCacheMode(QGraphicsView::CacheMode mode);
//拖拽模式
QGraphicsView::DragMode dragMode() const;
void setDragMode(QGraphicsView::DragMode mode);
//视图是否允许场景交互
bool isInteractive() const
void setInteractive(bool allowed)
//使能性能模式
void setOptimizationFlag(QGraphicsView::OptimizationFlag flag, bool enabled = true);
//QGraphicsView性能
QGraphicsView::OptimizationFlags optimizationFlags() const;
void setOptimizationFlags(QGraphicsView::OptimizationFlags flags);
//使能反走样模式
void setRenderHint(QPainter::RenderHint hint, bool enabled = true);
//反走样模式
QPainter::RenderHints renderHints() const;
void setRenderHints(QPainter::RenderHints hints);
//调整视图大小时,视图定位场景的方式
QGraphicsView::ViewportAnchor resizeAnchor() const;
void setResizeAnchor(QGraphicsView::ViewportAnchor ancho);
//皮筋选中模式
Qt::ItemSelectionMode rubberBandSelectionMode() const;
void setRubberBandSelectionMode(Qt::ItemSelectionMode mode);
//当前场景
QGraphicsScene* scene() const;
void setScene(QGraphicsScene *scene);
//场景区域
qreal width() const;
qreal height() const;
QRectF sceneRect() const
void setSceneRect(const QRectF &rect)
void setSceneRect(qreal x, qreal y, qreal w, qreal h)
//视图矩阵转换
QTransform transform() const;
void setTransform(const QTransform &matrix, bool combine = false);
//视图转换,视图定位场景的方式
QGraphicsView::ViewportAnchor transformationAnchor() const;
void setTransformationAnchor(QGraphicsView::ViewportAnchor anchor);
//更新内容方式
QGraphicsView::ViewportUpdateMode viewportUpdateMode() const;
void setViewportUpdateMode(QGraphicsView::ViewportUpdateMode mode);
事件
//菜单事件
void contextMenuEvent(QContextMenuEvent *event);
//拖拽事件
void dragEnterEvent(QDragEnterEvent *event);
void dragLeaveEvent(QDragLeaveEvent *event);
void dragMoveEvent(QDragMoveEvent *event);
void dropEvent(QDropEvent *event);
bool event(QEvent *event) override
//焦点事件
void focusInEvent(QFocusEvent *event);
bool focusNextPrevChild(bool next);
void focusOutEvent(QFocusEvent *event);
//输入事件
void inputMethodEvent(QInputMethodEvent *event);
//键鼠事件
void keyPressEvent(QKeyEvent *event);
void keyReleaseEvent(QKeyEvent *event);
void mouseDoubleClickEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void wheelEvent(QWheelEvent *event);
//绘制事件
void paintEvent(QPaintEvent *event);
void resizeEvent(QResizeEvent *event);
void scrollContentsBy(int dx, int dy);
void showEvent(QShowEvent *event);
bool viewportEvent(QEvent *event);
信号
void rubberBandChanged(QRect rubberBandRect, QPointF fromScenePoint, QPointF toScenePoint);//橡皮筋变动时发出
槽
//更新场景
void invalidateScene(const QRectF &rect = QRectF(), QGraphicsScene::SceneLayers layers = QGraphicsScene::AllLayers);
void updateScene(const QList<QRectF> &rects);
void updateSceneRect(const QRectF &rect);