我在一个鼠标可用性测试的项目里面用到了QT的Graphics View框架(使用Python+PyQt),这是一篇简单的介绍文章,Graphics View框架为2D绘图提供一个简单,容易使用,功能强大的解决方案,如果你正在开发需要复杂2D绘图功能的软件,可以考虑使用它。
QT的2D绘图系统结构
QT的2D绘图系统可以分作为两层,包括底层的绘图引擎和上层的图元绘制框架。
基础的绘图引擎主要包括QPainter,QPaintDevice和QPaintEngine类。其中我们一般使用到的的是处于最上层的QPainter,它包含大量的画点,画线,基础图形,组合图形,文本,光栅图像等功能,类似于GDI编程里面的DC(设备上下文)或者MFC中的包装类CDC。
在基础的绘图引擎之上,QT又提供了基于图元的绘制和管理框架,所谓图元,请考虑我们常使用的UML图中表示一个类的图形,它可能包括3个矩形,上面的矩形包括类名的文本,中间的包括多个属性名文本,下面的包括多个方法名文本,不同的矩形使用不同的刷子填充...无论上面的描述多么复杂,我们都可以抽象的看待类的图形为一个图元,而UML工具需要处理图元的选择,移动等事件。而QT的Graphics View框架则为上述功能提供了强有力的支持。
Graphics View 框架
整个Graphics View框架也是由3个主要的类组成,分别是QGrphicsItem,QGraphicsScene和QGraphicsView。
其中Item定义了图元,它的实现通常包括绘制自身和响应发生在自己身上的鼠标/键盘事件,并且Item的绘制是基于它本身的局部坐标系的。
而Scene则定义了整个场景,它包含所有需要绘制的图元(Item),把它们放在合适的位置,处理整个Scene的鼠标/键盘事件,根据用户的操作改变图元的状态(是否被选中等等),按需要更新需要重新绘制的区域,向包含的图元广播鼠标/键盘的事件,处理图元间的覆盖关系,碰撞检测等等。其中图元在Sc
QT的2D绘图系统结构
QT的2D绘图系统可以分作为两层,包括底层的绘图引擎和上层的图元绘制框架。
基础的绘图引擎主要包括QPainter,QPaintDevice和QPaintEngine类。其中我们一般使用到的的是处于最上层的QPainter,它包含大量的画点,画线,基础图形,组合图形,文本,光栅图像等功能,类似于GDI编程里面的DC(设备上下文)或者MFC中的包装类CDC。
在基础的绘图引擎之上,QT又提供了基于图元的绘制和管理框架,所谓图元,请考虑我们常使用的UML图中表示一个类的图形,它可能包括3个矩形,上面的矩形包括类名的文本,中间的包括多个属性名文本,下面的包括多个方法名文本,不同的矩形使用不同的刷子填充...无论上面的描述多么复杂,我们都可以抽象的看待类的图形为一个图元,而UML工具需要处理图元的选择,移动等事件。而QT的Graphics View框架则为上述功能提供了强有力的支持。
Graphics View 框架
整个Graphics View框架也是由3个主要的类组成,分别是QGrphicsItem,QGraphicsScene和QGraphicsView。
其中Item定义了图元,它的实现通常包括绘制自身和响应发生在自己身上的鼠标/键盘事件,并且Item的绘制是基于它本身的局部坐标系的。
而Scene则定义了整个场景,它包含所有需要绘制的图元(Item),把它们放在合适的位置,处理整个Scene的鼠标/键盘事件,根据用户的操作改变图元的状态(是否被选中等等),按需要更新需要重新绘制的区域,向包含的图元广播鼠标/键盘的事件,处理图元间的覆盖关系,碰撞检测等等。其中图元在Sc

本文介绍了QT的Graphics View框架,它为2D绘图提供强大解决方案,适用于需要复杂2D绘图功能的软件开发。框架由QGraphicsItem、QGraphicsScene和QGraphicsView三个主要类构成,支持图元绘制、事件处理、视图缩放等功能。在鼠标可用性测试项目中,该框架用于实现图元的选择、移动等交互操作。

3178

被折叠的 条评论
为什么被折叠?



