Qt图形视图框架一--概述

时间:2023-02-01 18:29:35

一、Graphics View 的特点

  1.Graphics View框架结构中,系统可以利用Qt绘图系统的反锯齿、OpenGL工具来改善绘图性能;
  2.Graphics View支持事件传播体系结构,可以使图元在场景(scene)中的交互能力提高1倍,图元能够处理键盘事件和鼠标事件。其中,鼠标事件包括鼠标按下、移动、释放和双击,还可以跟踪鼠标的移动;
  3.在Graphics View框架中,通过二元空间划分树提供快速的图元查找,这样就能够实时地显示包含上百万个图元的大场景。

二、Graphics View的三元素

1.场景类(QGraphicsScene)
  场景类提供了一个用于管理位于其中的众多图元的容器。场景类本身是不可见的,必须通过与之相连的视图类来显示及与外界进行交互操作。
  场景类的常用操作如下:
  QGraphicsScene::addItem():添加一个图元到场景中,注意不能在线程中添加Item,如需要在线程中添加则可以通过信号和槽来添加
  QGraphicsScene::items():返回场景中所以图元;
  QGraphicsScene::itemAt():返回指定点的顶层图元;
  
2.视图类(QGraphicsView)
  视图类用于显示场景中的图元,一个场景可以通过多个视图表现,也可以为相同的数据集提供几种不同的视图。
  
3.图元类(QGraphicsItem)
  图元类是场景中各个图元的基类,在它的基础上可以继承出各种图元类。Qt中已经预置了如下图元:直线图元(QGraphicsLineItem)椭圆图元(QGraphicsEllipseItem)文本图元(QGraphicsTextItem)矩形图元(QGraphicsRectItem)等。当然用户可以继承QGraphicsItem实现符合自己需要的图元。
  QGraphicsItem主要有以下几点功能:
  1.处理鼠标按下、移动、释放、双击、悬停、滚轮、和右键菜单事件;
  2.处理键盘输入事件;
  3.处理拖拽事件;
  4.分组;
  5.碰撞检测。

三、Graphics View的坐标系统

  Graphics View坐标是基于笛卡尔坐标系,三个Graphics View基本类有各自不同的坐标系。当然Graphics View提供了三个坐标系统之间的转换函数。在绘制图形时,Graphics View的场景坐标对应QPainter的逻辑坐标、视图坐标和设备坐标。
  
1.场景坐标
  场景坐标是所有图元的基础坐标系统。QGraphicsScene类的坐标系以中心原点(0, 0),X轴正方向向右,Y轴正方向向下,如下图所示:
  Qt图形视图框架一--概述
2.视图坐标
  视图坐标是窗口部件的坐标。视图坐标的单位是像素。QGraphicsView类的左上角是(0,0),X轴正方向向右,Y轴正方向向下。如下图所示:
  Qt图形视图框架一--概述
  
3.图元坐标
  图元使用自己的本地坐标,这个坐标系统通常以图元中心为原点,这也是所有变换的原点。图元坐标方向是X轴正方向向右,Y轴正方向向下。图元创建后,只需注意图元坐标就可以了,QGraphicsScene和QGraphicsView会完成所有的变换。图元坐标如下图所示:
  Qt图形视图框架一--概述

  Fraphics View框架提供了多种坐标变换函数,如下标所示: 
Qt图形视图框架一--概述