往期回顾
Qt绘图与图形视图之绘图技术知识点的简单介绍-CSDN博客
Qt绘图与图形视图之常见图形、路径、文字、图片的绘制介绍-CSDN博客
Qt绘图与图形视图之移动鼠标手动绘制任意多边形的简单介绍-CSDN博客
Qt绘图与图形视图之场景、视图架构的简单介绍
一、GraphicsView
1、存在问题
在paintEvent()方法中,使用QPainter可以绘制一些常用的图形,如果需要对绘制的图形进行编辑,例如拉伸,拖拽,组合等,会比较复杂,用代码是可以实现的,但是同样比较复杂,例如处理鼠标的形状,判定拉伸拖拽的点,然后重绘等等,这是比较复杂的事情,如果再拉伸的时候和其它图形有冲突,还需要再判定处理,另外使用QPainter的绘制技术也不太适合对图形进行选择、编辑、拖放、修改等功能。
2、解决方案
Qt提供了GraphicsView图形架构,是一种基于图形项的模型/视图模式,使用GraphicsView架构可以绘制复杂的有几万个基本图形元件的图形并且每个图形元件是可选择、可拖放和修改的,类似于矢量绘图软件的绘图功能。
GraphicsView架构主要由3个部分组成,即场景、视图和图形项,其构成的QGraphicsView
绘图系统结构如图所示:
二、场景视图基本关系
1、场景QGraphicsScene
QGraphicsScene类提供绘图场景,场景是不可见的,是管理图形项的容器,可以向场景添加图形项,获取场景中的某个图形项等。
场景主要具有这些功能:
➢提供管理大量图形项的快速接口; |
➢将事件传播给每个图形项;. |
➢管理每个图形项的状态,例如选择状态、焦点状态等; |
➢管理未经变换的渲染功能,主要用于打印。 |
2、视图QGraphicsView
QGraphicsView提供绘图的视图组件,用于显示场景中的内容。可以为一个场景设置几个视图,用于对同一个数据集提供不同的视口。Qt设计器提供了QGraphicsView控件。
场景在视图中的显示时的两种情况:
2.1视图比场景大
如果视图比场景大,会显示场景的全部内容。缺省情况下,当视图大于场景时,场景在视图的中间部分显示,也可以设置视图的Alignment属性控制场景在视图中的显示位置;
2.2视图比场景小
当视图小于场景时,视图只能显示场景的一部分内容,但是会自动提供卷滚条在整个场景内移动。
3、图形项QGraphicsltem
图形项就是一些基本的图形元件,图形项的基类是QGraphicsltem。Qt提供了一些基本的图形项,如绘制椭圆的QGraphicsellipseltem、绘制矩形的QGraphicsRectltem绘制、文字的QGraphicsTextltem等。
QGraphicsltem支持如下的一些操作:
➢支持鼠标事件响应,包括鼠标按下、移动、释放、双击,还包括鼠标停留、滚轮、快捷菜单等事件; |
➢支持键盘输入,按键事件; |
➢支持拖放操作; |
➢支持组合,可以是父子项关系组合,也可以是通过QGraphicsltemGroup类进行组合。 |
以上就是Qt里场景、视图架构的简单介绍。
都看到这里了,点个赞再走呗朋友~
加油吧,预祝大家变得更强!