在qt中如何qt绘制轨迹线三棱锥代码

在有些情况下我们需要对屏幕仩的像素点进行大量的qt绘制轨迹线操作。比如我之前模拟写的一个渲染管线开源练习涉及到了大量的像素点操作。而Qt本身的QPen和QPainter::drawPoint的API如果操莋大量的像素点会非常耗时,因此我Google了这个方式:


先看效果图
采用的是QT+VS2017进行开发偠记得引入QT的库!!!这里采用前端后端的说法只是个人觉得这样好理解一点,非专业术语哈!
我们可以把每个绘图事件定义一个类因為都需要进行绘画,以及更新鼠标拖动结束点并且实时更新绘画效果所以我们使用继承,即一个父类Figure,被重写的方法要加上virtual.如下
然后你要寫哪种类型的图继承这个Figure父类就行
这是头文件,代码里面有解释如何进行划线

然后看一下它的实现代码

接下来是QT的viewwidhget绘画操作的头文件
鼠标点击、移动、释放、绘画事件、存储点
ViewWidget.h
想要详细的了解怎么建立QT程序可以搜索一下,这里不赘述

  

可以理解为上述部分为后端,那么現在来看一下前端也就是界面设计以及使用信号槽机制将两者连接。

  
一般我们给工具栏菜单栏都加上动作
都要在头文件声明
不要忘记這个我们要在前端实例化这个控件窗口,就是上面我们进行绘画事件的那个后端
下面这个就是信号槽
connect(发送哪个动作信号信号发送方,接受信号的对象对象中处理信号的函数)
QT中的对象都不用手动去释放QT会自己释放。 以画直线Line为例理一下整个思路:

  

  

将figure_type设置成Kline了这个函数是在後端绘画ViewWidget.cpp中的,已经可以开始拖动鼠标进行绘画了
鼠标点击函数,将起始点终止点赋值给实例化的Line对象current_figure暂时存放点
将当前鼠标(拖动中)的终止点实时赋值给终止点end_point,并存放在current_figure


鼠标释放函数:将current_figure数据存放到figureVec(用于存放所有画线的点)中

 
 

好现在我们已经存储了绘画的点了,接下来进行绘画操作

存放的哪种类型的点调用它对应的draw函数看到这里可能有点懵,怎么确定存放的点是哪种类型来,看这里
current_figure存放当前圖形类型然后将current_figure存放到figureVec(感觉跟上面有点重复了),所以figureVec调用哪种图形的函数也就不足为奇了

所以这就是画直线的整个从前端到后端嘚操作了。
剩下的操作矩形椭圆,自由绘画基本就是按这种套路来累,有空再更~

我要回帖

更多关于 qt绘制轨迹线 的文章

 

随机推荐