QT学习笔记12(图形视图框架)

一、基本知识

1、图形视图(Graphics View)提供了一个平台,用于大量自定义2D图元的管理与交互,并提供了一个视图部件(view widget)来显示可以缩放和旋转的图元。
框架包括一个事件传播架构,支持场景(Scene)中的图元(Item)进行精确的双精度交互功能。图元可以处理键盘事件、鼠标按下、移动、释放和双击事件,同时也能跟踪鼠标移动。

        架构:一个场景,多个图元位于其中,通过视图显示
       图形视图使用一个BSP(Binary Space Partitioning - 二叉空间分割)树,以提供对图形元素的快速查找,正因为如此,它可以使超大的场景实时地可视化,即使包含数百万的图元。

       图形视图框架是按照MVC设计模式绘图, MVC设计模式包括三个元素:数据的模型(Model),用户界面的视图(View) ,用户再界面上的操作控制Controller。

      主要应用: 绘图软件,显示地图软件

2、图形视图架构

图形视图提供了一个基于图元的方式来实现模型视图(model-view)编程,很像InterView中的便利类:QTableView、QTreeViewQListView。多个视图可以观察一个单独的场景,场景则包含了不同的几何形状图元 。

(1)Graphics View的特点

        QGraphicsView 是为了在场景上显示图元而提供的类。QGraphicsView包括可视控件区域和用于显示大场景滚动区域,可以接受用户输入事件。QGraphicsView间接继承至QWidget。

  • 框架结构中,系统可以利用Qt绘图系统的反锯齿、OpenGL工具来改善绘图性能。
  • 支持事件传播体系结构,可以使用图元在场景中的交互能力提高一倍,图元能够处理鼠标事件和键盘事件。
  • 通过二元空间划分树(BSP)提供快速的图元查找。

(2)Graphics View的三要素

场景类、视图类、图元类统称为三要素

1)场景类(QGraphicsScene)

它是一个用于放置图元的容器,本身是不可见的,必须通过与之相连的视图类来显示及与进行互操作。

场景类的主要工作包括提供对它包含的图元的操作结构和传递事件、管理各个图元的状态(如选择和焦点处理)、提供无变换的绘制功能(如打印)。

  • 事件传播体系结构将场景事件发送给图元,同时也管理图元之间的事件传播。如果场景接收到了在某一个点的鼠标单击事件,场景会将事件传递给这一点的图元。
  • 一个场景分为三个层:图形项层(ItemLayer)、前景层(ForegroundLayer)和背景层(BackgroundLayer)。场景的绘制总是从背景层开始,然后是图形项层,最后是前景层。

2)视图类:QGraphicsView类

它提供了一个可视的窗口,用于显示场景中的图元。在同一个场景中可以有多个视图,也可以为相同的数据集提供几种不同的视图。

QGraphicsScene类可以保存图元,也可以处理用户输入事件。是图形对象QGraphicsItem的容器,为管理大量的items提供一个快速的接口。QGraphicsScene只继承自QObject,所以本身是不可见的,必须通过与之相连的视图类QGraphicsView来显示.

3)图元类:QGraphicsItem类

它是场景中各个图元的基类,在它的基础上可以继承出各种图元类。

QGraphicsItem是为了在图形视图上实现图形对象而提供的类。支持鼠标、键盘、焦点事件,支持拖放,在它的基础上可以继承出各种图元类。

3、Graphics View的坐标系

Graphics View的基本类中有各自不同的坐标系,场景坐标系、视图坐标系和图元坐标系。

1)场景坐标系:

是所有图元的基础坐标系,场景坐标系描述了顶层的图元,每个图元都有场景坐标和相应的包容框。场景坐标的原点在场景的中心,坐标原点是x轴正方向向右,y轴正方向向下。

2)视图坐标

视图坐标是窗口部件的坐标,视图坐标的单位是像素,视图的左上角是(0,0),x轴正方向向右,y轴正方向向下。

3)图元坐标

图元使用自己的本地坐标,这个坐标系通常以图元的中心为原点,这也是所有变换的原点。图元的坐标方向是x轴正方向向右,y轴正方向向下。

4、坐标系映射

父子图元坐标映射:

QGraphicsItem::mapToParent     //子图元坐标映射到父图元

QGraphicsItem::mapFromParent   //父图元坐标映射到子图元

图元与场景坐标映射:

QGraphicsItem::mapToScene     //图元到场景

QGraphicsItem::mapFromScene   //场景到图元

场景与视图坐标映射:

QGraphicsView::mapFromScene  //场景到视图

QGraphicsView::mapToScene    //视图到场景

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值