admin管理员组

文章数量:1550952

Qt实现CAD软件的多种图形绘制功能

  • Qt相关基础知识GraphicsView绘图架构
    • 场景
    • 视图
    • 图形项
  • GraphicsView绘图架构的不同视图绘制不同的图形
    • 问题描述
    • 解决方法(为同一个场景提供多个不同的视图)

Qt相关基础知识GraphicsView绘图架构

Qt为绘制复杂的可交互图形提供了Graphics View绘图架构,是一种基于图形项(GraphicsItem)模型/视图模式,与model/view模式类似。

场景

QGraphicsScene类提供绘图场景(Scene)。场景是不可见的,是一个抽象的管理图形项的容器,可以向场景中添加图形项,获取场景中图形项等。

视图

可以为同一个场景提供多个不同的视图,用于对同一数据集提供不同的视口。
初学QtGraphicsView绘图架构时,我还纳闷,为同一数据及提供不同的视图,每个视图上呈现的图形是完全一样的,能有什么用呢?本篇文章便是该技术的巧妙应用,请耐心读完全文。
这一点对于绘制不同的图形(不同绘图功能)提供了便利,不同的绘图功能,可以认为是不同的交互,而视图又是软件与用户交互的接口。所以对于同一个场景,提供多个不同视图,实现不同的交互,也就是实现不同的绘图功能时,切换不同的视图即可。

图形项

就是场景中图形元件。可以理解为场景中的数据元素。比如一个圆、多边形、矩形等。

GraphicsView绘图架构的不同视图绘制不同的图形

问题描述

如下图所示,实现单击不同的按钮,在绘图区域分别动态绘制多边形、圆形、矩形

解决方法(为同一个场景提供多个不同的视图)

本篇文章讲述用不同视图各自实现一个绘图功能,解决这一问题。
1)从QGraphicsView派生出绘制多边形的类PolygonGraphicsView
2)从QGraphicsView派生出绘制圆形的类CircleGraphicsView
3)从QGraphicsView派生出绘制矩形的类RectGraphicsView
4)实例化一个QGraphicsScene对象
5)分别用派生出3个类和QGraphicsView类实例化出4个视图类对象,4个视图对象均使用4)中QGraphicsScene对象,并装入QStackedWidget对象中
6)缺省情况下QStackedWidget对象中CurrentWidget为QGraphicsView类视图对象,不能绘制图形
7)点击不同的按钮时,setCurrentWidget为相应的视图对象,
多边形按钮对应PolygonGraphicsView 类对象,
圆形按钮对应CircleGraphicsView 类对象,
矩形按钮对应RectGraphicsView 类对象,
每次完成一次绘图过程,setCurrentWidget为QGraphicsView类视图对象,不能绘制图形
为什么要用不同视图(QGraphicsVIew子类)实现各个不同的绘图功能,解决这一问题呢?答案是显而易见的
1、不同绘图功能完全隔离(减少耦合性)
2、可读性强
3、维护简单,扩展性强
4、编程思路清晰,编码简单
请观看程序演示

Qt绘制图形

有兴趣的朋友可下载源码运行、学习
Qt实现类似cad简单图形的绘制源码

本文标签: 图形多种功能软件QT