简述
Graphics View提供了一个平台用于大量自定义 2D 图元的管理与交互框架包括一个事件传播架构支持场景 Scene 中的图元 Item 进行精确的双精度交互功能。Item 可以处理键盘事件、鼠标按下、移动、释放和双击事件同时也能跟踪鼠标移动。
和 Google 地图一样在管理大量 Item 的时候通常需要 View 具有交互平移/缩放/旋转功能。
交互式 QGraphicsView
便于以后复用实现一个交互式 QGraphicsView - InteractiveView。
主要功能包括
平移
方式一鼠标左键按下然后移动
方式二按下上/下/左/右键分别向各个方向移动
缩放
方式一鼠标滚轮向上滚动放大向下滚动缩小
方式二按加号键带 Shift进行放大按减号键缩小
旋转按空格键逆时针旋转回车键顺时针旋转
效果
源码
interactive_view.h
#ifndef INTERACTIVE_VIEW_H
#define INTERACTIVE_VIEW_H
#include
class QWheelEvent;
class QKeyEvent;
class InteractiveView : public QGraphicsView
{
Q_OBJECT
public:
explicit InteractiveView(QWidget *parent = 0);
// 平移速度
void setTranslateSpeed(qreal speed);
qreal translateSpeed() const;
// 缩放的增量
void setZoomDelta(qreal delta);
qreal zoomDelta() const;
protected:
// 上/下/左/右键向各个方向移动、加/减键进行缩放、空格/回车键旋转
void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
// 平移
void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
// 放大/缩小
void whee