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 的代理层
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mahuifa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值