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派生的子类结构如下图:

在这里插入图片描述

常用的基本图元项有:

  1. QGraphicsLineItem:直线图元
  2. QGraphicsRectItem:矩形图元
  3. QGraphicsEllipseItem:椭圆图元
  4. QGraphicsPolygonItem:多边形图元
  5. QGraphicsSimpleTextItem:简单文本图元
  6. QGraphicsTextItem:富文本图元
  7. QGraphicsPixmapItem:图片图元
  8. QGraphicsPathItem:绘图路径图元
    aphicsTextItem:富文本图元
  9. QGraphicsPixmapItem:图片图元
  10. QGraphicsPathItem:绘图路径图元
  11. QGraphicsProxyWidget:用于在 QGraphicsScene 中嵌入 QWidget 的代理层
posted @ 2024-08-20 00:02  mahuifa  阅读(0)  评论(0编辑  收藏  举报  来源