天天看点

Qt视图框架QGraphicsViewGraphics View 的特点Graphics View的三元素Graphics View的坐标系统

Graphics View 的特点

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

Graphics View的三元素

  • 场景类(QGraphicsScene)

    场景类提供了一个用于管理位于其中的众多图元的容器。场景类本身是不可见的,必须通过与之相连的视图类来显示及与外界进行交互操作。

    场景类的常用操作如下:

QGraphicsScene::addItem():添加一个图元到场景中
	QGraphicsScene::items():返回场景中所以图元;
	QGraphicsScene::itemAt():返回指定点的顶层图元;
           
  • 视图类(QGraphicsView)

     视图类用于显示场景中的图元,一个场景可以通过多个视图表现,也可以为相同的数据集提供几种不同的视图。

  • 图元类(QGraphicsItem)

     图元类是场景中各个图元的基类,在它的基础上可以继承出各种图元类。Qt中已经预置了如下图元:直线图元(QGraphicsLineItem)、椭圆图元(QGraphicsEllipseItem)、文本图元(QGraphicsTextItem)、矩形图元(QGraphicsRectItem)等。当然用户可以继承QGraphicsItem实现符合自己需要的图元。

      QGraphicsItem主要有以下几点功能:

      1.处理鼠标按下、移动、释放、双击、悬停、滚轮、和右键菜单事件;

      2.处理键盘输入事件;

      3.处理拖拽事件;

      4.分组;

      5.碰撞检测。

Graphics View的坐标系统

Graphics View坐标是基于笛卡尔坐标系,三个Graphics View基本类有各自不同的坐标系。当然Graphics View提供了三个坐标系统之间的转换函数。

视图(QGraphicsView)的坐标

视图将窗口中的左上角作为原点(0,0),不弄窗口大小,原点总是在左上角。向右为X轴正方向,向下为Y轴正方向。如下图所示:

Qt视图框架QGraphicsViewGraphics View 的特点Graphics View的三元素Graphics View的坐标系统

场景坐标

场景坐标是所有图元的基础坐标系统。通常情况下场景的坐标原点(0,0)在场景的的中心位置。向右为X轴的正方向,向下为Y轴的正方向,如下图所示:

Qt视图框架QGraphicsViewGraphics View 的特点Graphics View的三元素Graphics View的坐标系统

通过

void setSceneRect(qreal x, qreal y, qreal w, qreal h)

函数可以设置场景的坐标以及大小。其中x和y用于设定场景左上角的坐标,w和h来设定场景的大小。

图元(QGraphicsItem)坐标

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

Qt视图框架QGraphicsViewGraphics View 的特点Graphics View的三元素Graphics View的坐标系统

void setPos(qreal x, qreal y)

指定图元的原点在场景中的坐标。

坐标变换函数

QGraphicsView框架提供了多种坐标变换函数,如下图所示:

Qt视图框架QGraphicsViewGraphics View 的特点Graphics View的三元素Graphics View的坐标系统
Qt

继续阅读