QT学习笔记: QGraphicsView的使用

QT学习笔记: QGraphicsView的使用
一:Graphics View简述
Graphics View框架实现了模型-视图结构的图形管理,能对大量图元进行管理,支持碰撞检测,坐标变换和图元组等多种方便的功能;
GraphicsView框架结构主要包含三个主要的类QGraphicsScene(场景)、QGraphicsView(视图)、QGraphicsItem(图元)。
QGraphicsView提供一个可视的窗口,用于显示场景中的图元,一个场景中可以有多个视图。
QPainter采用面向过程的描述方式绘图;GraphicsView采用的是面向对象的描述方式绘图。
GraphicsView绘图时首先创建一个场景,然后创建图元对象(如一个直线对象、一个多边形对象),再使用场景的add()函数,将图元对象添加到场景中,最后通过视图进行显示。对于复杂的图像来说,如果图像包含大量的直线、曲线、多边形等图元对象,管理图元对象比管理QPainter的绘制过程语句要容易,并且图元对象更符合面向对象的思想,图形的可复用性更好。

二:QGraphicsScence
QGraphicsScene本身不可见,是一个存储QGraphicsItem对象的容器,必须通过与之相连的QGraphicsView视图来显示及与外界进行交互
主要功能:
A、提供管理大量图元的快速接口
B、传播鼠标、键盘等事件给场景中的每个图元
C、管理图元状态,如图元选择和焦点处理
D、提供无变换的渲染功能,如打印

三: QGraphicsItem
QGraphicsItem 类是 QGraphicsScene 中所有 item 的基类,例如:
QGraphicsSimpleTextItem:提供了一个简单的文本标签项
QGraphicsTextItem:提供了一个格式化的文本项
QGraphicsLineItem:提供了一个直线项
QGraphicsPixmapItem:提供了一个图像项
QGraphicsRectItem:提供了一个矩形项
QGraphicsEllipseItem:提供了一个椭圆项
QGraphicsPathItem:提供了一个路径项
QGraphicsPolygonItem:提供了一个多边形项

四、GraphicsView坐标系统
Graphics View坐标系基于笛卡尔坐标系,图元的场景中的位置和几何形状通过x坐标和y坐标表示。当使用没有变换的视图观察场景时,场景中的一个单位对应屏幕上的一个像素。
Graphics View架构中有三个有效的坐标系统,图元坐标场景坐标视图坐标。Graphics View提供了三个坐标系统之间的转换函数。在绘制图形时,QGraphics View的场景坐标对应QPainter的逻辑坐标,QGraphics View的视图坐标对应QPainter的设备坐标。
(1)图元坐标(Item Coordinates)
图元存在于自己的本地坐标上,图元的坐标系统通常以图元中心为原点,图元中心也是所有坐标变换的原点,
在这里插入图片描述
创建自定义图元时,只需要注意图元的坐标,QGraphicsScene和QGraphicsView会完成所有的变换。 例如,如果接受到一个鼠标按下或拖入事件,所给的事件位置是基于图元坐标系的。
QGraphicsItem::pos()获得的是item coordinates,每个item的中心就是item coordinates的原点。
QGraphicsItem::scenePos() 获得的是item coordinates对应的scene coordinates

(2)场景坐标(Scene Coordinates)
场景坐标是所有图元的基础坐标系统。场景坐标系统描述了顶层图元的位置,并且构成从视图传播到场景的所有场景事件的基础。每个图元在场景上都有场景坐标和边界矩形。场景坐标的原点在场景中心,坐标原点是X轴正方向向右,Y轴正方向向下。

(3)视图坐标(View Coordinates)
视图坐标是窗口部件的坐标,视图坐标的单位是像素,QGraphicsView的左上角是(0,0)。所有鼠标事件、拖拽事件最开始都使用视图坐标,为了和图元交互,需要转换坐标为场景坐标。

(4)坐标变换
在Graphics View框架中,经常需要将多种坐标变换,从场景到图元,从图元到图元,从视图到场景 。QGraphics View框架坐标变换函数如下:
QGraphicsView::mapToScene()视图到场景
QGraphicsView::mapFromScene() 场景到视图
QGraphicsItem::mapFromScene() 场景到图元
QGraphicsItem::mapToScene() 图元到场景
QGraphicsItem::mapToParent() 子图元到父图元
QGraphicsItem::mapFromParent() 父图元到子图元
QGraphicsItem::mapToItem()本图元到其他图元
QGraphicsItem::mapFromItem()其他图元到本图元

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值