您的位置:首页 > 编程语言 > C语言/C++

c++ 实现图形计算

2015-02-10 11:24 155 查看
基础知识,我会讲解原理:

一切都是基于Qt 的图形视图框架,数学知识要求基本的线性变换,几何知识,向量使用技巧。 好了我们开始。

在Qt 里面,如果要编写一如 绘图软件,地图显示软件 涉及大量的绘图应用将会非常有用。

其工作原理便是:一个场景中有多个图元,而图元可以拖动 单击 选择,然后通过视图显示

当使用没有变换的视图观察场景时,场景中的一个单元对应屏幕上的一个像素

图元坐标通常以图元中心为原点,X轴正方向为向右,Y轴正方向为向下

场景坐标的原点在场景中心,X轴正方向为向右,Y轴正方向为向下

视图坐标以左上角为原点,X轴正方向为向右,Y轴正方向为向下

所有的鼠标事件最开始都是使用视图坐标

场景:图元的容器

1.提供管理很多图元的接口

2.传播事件到图元中

3.管理图元状态,例如选择和焦点处理

4.提供非转换的绘制功能,主要用于打印

视图:

一个可视的子部件,可视化场景的内容

多个视图可以显示同一个场景

坐标转换:QGraphicsView::mapToScene(), QGraphicsView::mapFromScene()

图元:

支持鼠标事件,滚轮事件,上下文菜单事件

支持键盘输入焦点,按键事件

支持拖放

支持分组

冲突探测

提供坐标转换,图元与场景,图元与图元之间

利用QGraphicsItem::shape()和QGraphicsItem::collidesWith()

实现冲突探测,这2个函数都是虚函数

QGraphicsItem子类:

QGraphicsEllipseItem provides an ellipse item

QGraphicsLineItem provides a line item

QGraphicsPathItem provides an arbitrary path item

QGraphicsPixmapItem provides a pixmap item

QGraphicsPolygonItem provides a polygon item

QGraphicsRectItem provides a rectangular item

QGraphicsSimpleTextItem provides a simple text label item

QGraphicsTextItem provides an advanced text browser item

QGraphicsSvgItem provides a SVG file item

QGraphicsScene:

拥有多个图元,包含三层:背景层,图元层,前景层

背景层和前景层可以使用QBrush绘制,也可以使用drawBackground(),drawForeground()实现

如果使用图片作为背景,可以用texture QBrush(pixmap)实现

前景层brush可以使用半透明的白色实现褪色效果,或者使用交叉模式实现网格重叠

场景可以告诉我们,哪些图元发生冲突,哪些图元被选择,哪些图元位于一个特定的点或者区域

每个图元可以是:1.顶级图元,场景是它的父亲;2.孩子,它的父亲是另一个图元,任何作用于父图元的转换

都将自动应用于它的孩子

2种分组方式:1.一个图元成为另一个图元的孩子; 2.使用QGraphicsItemGroup。使用分组,可以使位于同一个

组的所有图元的操作都相同

QGraphicsView:

是一个Widget,用于显示一个场景,提供滚动条功能和转换功能,可以缩放和旋转场景。

默认使用内建的2D画图引擎,可以使用OpenGL:在构造后,调用setViewport()

坐标系统:

使用3种坐标系统:viewport, scene, item

viewport: 位于QGraphicsView内部

scene: 逻辑坐标用于定位顶级图元

item: 与图元相关,以图元的(0,0)为中心,移动图元时,它的坐标不会改变

实践中,主要关注场景坐标(定位顶级图元)和图元坐标(定位子图元和绘制图元)

在图元自己的坐标系统里面绘图意味着我们不用担心它在场景中的位置和应用于它的坐标转换



文件结构:



源码下载:

点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: