GraphicsView学习-内容介绍(1) 原创
GraphicsView学习-内容介绍(1)
更多精彩内容 |
---|
👉个人内容分类汇总 👈 |
👉QGraphicsView框架 👈 |
一、Graphics View框架简介
- Qt中常见的绘图一般是继承QWidget通过重写paintEvent虚函数来进行绘图,但是这种绘图方式如果在实现较为复杂的需求时就会比较麻烦,开发工作量巨大,比如实现单个图形项的移动、缩放等操作。
- Graphics View绘图架构提供了一个用于管理大量定制2D图形项目并与之交互的界面,以及一个用于可视化项目的视图小部件,并支持缩放和旋转;
- 可以根据需求使用已有的图元(QGraphicsItem )或者自定义图元进行绘图,图元与图元直接相互独立,互不影响,这就很爽了,在实现单个图元、一组图元、所有图元的操作就很方便了。
- 该框架包括一个事件传播架构,该架构允许对场景中的项目进行精确的双精度交互能力。图元可以处理按键事件、鼠标按下、移动、释放和双击事件,它们还可以跟踪鼠标移动。
- Graphics View 使用 BSP(Binary Space Partitioning)树来提供非常快速的图元查找,因此,它可以实时可视化大型场景,即使有数百万个图元。
二、Graphics View主要构成
Graphics View 框架结构主要由场景类(QGrphicsSene)、视图类(QGraphicsView)和图元类(QGraphicsItem) 三部分组成。
1、QGraphicsScene
QGraphicsScene为 Graphics View绘图提供了一个场景,这个场景是不可见的,可以看作是一个用来管理图元的类,具体有以下职责:
- 提供用于管理大量图元(item)的快速界面;
- 将事件传播到每个图元;
- 管理每个图元的状态,例如选择和焦点处理;
- 提供未转换的渲染功能;主要用于打印。
2、QGraphicsView
QGraphicsView 提供一个可视的窗口,用于渲染显示场景(Scene)中的图元。
- 一个场景(Scene)可以添加显示到多个视图(View),例如:
QGraphicsScene* scene = new QGraphicsScene();
scene->addLine(QLine(0, 0, 100, 100));
QGraphicsView* view1 = new QGraphicsView(scene);
QGraphicsView* view2 = new QGraphicsView(scene);
view1->show();
view2->show();
- 视图小部件是一个可滚动的窗口部件,可提供滚动条用于浏览大型场景;
- QGraphicsView 支持使用OpenGL渲染(后面详细说)。
3、QGraphicsItem
QGraphicsItem类是场景中图元的基类,通过继承QGraphicsItem提供了几个标准基本图元类,也可在此基础上自定义图形项,QGraphicsItem还支持下列功能:
- 鼠标按下、移动、释放和双击事件,以及鼠标悬停事件、滚轮事件和上下文菜单事件;
- 键盘输入焦点和按键事件;
- 鼠标拖放;
- 通过父子关系和使用QGraphicsItemGroup进行分组;
- 碰撞检测。
QGraphicsItem派生的子类结构如下图:
常用的基本图元项有:
- QGraphicsLineItem:直线图元
- QGraphicsRectItem:矩形图元
- QGraphicsEllipseItem:椭圆图元
- QGraphicsPolygonItem:多边形图元
- QGraphicsSimpleTextItem:简单文本图元
- QGraphicsTextItem:富文本图元
- QGraphicsPixmapItem:图片图元
- QGraphicsPathItem:绘图路径图元
aphicsTextItem:富文本图元 - QGraphicsPixmapItem:图片图元
- QGraphicsPathItem:绘图路径图元
- QGraphicsProxyWidget:用于在 QGraphicsScene 中嵌入 QWidget 的代理层