![](https://csdnimg.cn/release/download_crawler_static/86386072/bg5.jpg)
三 设计思路
1 总体思路
QT 官方库中包含了一个实现图形绘制、操作等的 QGraphicsScene 类,这个类是一个界
面类,用于管理和显示 QGraphicItem 对象,其所包含的操作有:平移、缩放、旋转、碰撞
检测等,并且可以同时对多个 QGraphicItem 对象进行相同的操作,QGraphicItem 对象可以
自定义图形形状,然而一个棘手的问题就是,QGraphicItem 类并没有实现改变大小、吸附连
线等,而且据文档所说和网上查阅,要实现改变大小,需要重写其自定义的绘图事件和鼠标
事件,特别是绘图事件,这将改变图形的很多数据成员信息,所以虽然这个官方库功能强大,
特别是有碰撞检测,但是应用场合并不是用来做一般的图形绘制,而是更高级的类似游戏
和 CAD 类的软件,所以决定自己设计大体框架;
从 QT 的 QGraphicsScene 类和 QGraphicItem 类的源码中我也学习到了一些东西,源码可见
( Qt 根 目 录 \5.11.2\Src\qtbase\src\widgets\graphicsview )。 首 先 , QGraphicsScene 类 和
QGraphicItem 类互为友元类,因此 QGraphicsScene 类对象可以和 QGraphicItem 类对象相互
访问对方的私有和保护成员而不需要调用公共接口,其次,整个框架分为了 QGraphicsScene
场景部件、QGraphicsView 视图部件、QGraphicsItem 图形部件,即整个框架分为多个部分分
别进行编程设计,据此进行了一下界面设计思路构想:
应设计三个部件,左边的图像选择部件,中心的图形绘制部件(简称画布),上部的图
形信息部件;
1.1 图形设计思路
使用一个抽象基类来定义各种图形所共有的数据和方法,该类需要继承自另一个类,这
个类可以实现绘制事件,然后从自定义的基类派生出各种不同图形的子类,其中子类主要实
现绘制和其他一些异于基类的数据和方法。
抽象基类主要包含位置信息、起点终点信息、文本信息、绘制大小点的虚函数、绘制磁
力点的虚函数、绘制图像的纯虚函数等;
1.2 画布设计思路
自定义了一个类,该类继承自另一个类,这个类需要作为图形类抽象基类的友元类,使
其可以访问图形抽象基类的私有成员;这个类需要实现读取保存操作,且实现一组管理所包
含图形的数据和方法;
1.3 操作设计思路
对于各种操作,实现思路是重载事件处理函数和设置响应事件;