在之前我采用的是Painnter进行绘图事件,采用Qpainnter绘图时需要在绘图设备的paintEvent()事件里编写绘图程序,实现整个绘图过程。这种方法如同在windows的画图软件在绘图,绘制的图形是位图,这种方法适合于复杂度不高的固定图形,不能实现图件的选择、编辑、拖放、和修改等功能。
Graphics View架构主要由三个部分组成,即视图、场景、图形项。网络上对于这三个部分的解释有很多,但都不是能很明显的表示,我说说我的理解。
- 视图(View):视图是显示场景的部分,视图相当于是,ui界面的物理边框,它的左上角坐标为(0,0)。当视图>场景时,场景在视图的中心位置显示;当视图<场景时,视图只能显示场景的部分内容,但是会自动提供卷滚条在整个场景内移动。
- 场景(scene):场景是显示图源的部分,场景相当于,ui界面的一个部件例如Layout,里面可以放置很多图形。
- 提供管理大量图形项的快速接口;
- 将事件传播给每个图形项;
- 管理每个图形项的状态、焦点状态等;
- 管理未经变换的渲染功能,主要用于打印。
- 图形项(Item):就是一些基本的图形元件,以及鼠标的响应、键盘的输入、支持拖放、支持组合。
Graphics View坐标系统
Graphics View系统有三个有效的坐标系,图形项坐标、场景坐标、视图坐标。
- 图形项坐标:图形项使用自己的局部坐标,通常以其中心为(0,0),也是各种坐标变换的中心。
- 视图坐标:视图坐标就是窗口界面的物理坐标,单位是像素。视图坐标只与widget或视口有关,而与场景观察无关。视口的左上角坐标为(0,0)。所以的鼠标事件、拖放事件的坐标首先是由视图坐标定义的,然后用户需要将这些坐标映射为场景坐标,以便和图形项交互。
- 场景坐标:场景是所有图形的基础坐标,场景坐标描述了每个顶层图形项的位置。创建场景时可以定义场景矩形区的坐标范围,例如:
scene = new QGraphicsScene(-400,-300,800,600);
这样定义的scene的左上角坐标为(-400,-300)宽度为800,高度为600,的矩形区域,单位是像素。
Graphics View绘图架构,理解1
原文:https://www.cnblogs.com/houwenzhi/p/fcaa1a4ae2eb76408d7a18c1d26f6688.html