Qt下绘制PPI扫描的雷达图

本文介绍了在Qt环境中使用QPainter绘制PPI雷达图的方法。通过创建paintTable和paintWindow类,实现了颜色标尺和雷达图的绘制。paintWindow类重写了paintEvent、resizeEvent和timerEvent,以实时更新和重绘图像。尽管已经实现了动态显示,但存在绘图效率较低等问题,需要进一步优化数据接口和提高绘图速度。
摘要由CSDN通过智能技术生成

简述

PPI扫描,即按一个仰角进行水平面上的扫描,得到二维图像的方式。它的特点是来自不同距离的回波是离地面不同的高度,扫描得到的数据在空间类似一个倒立圆锥的曲面表面。
Qt可以用OpenGL绘制复杂的图像,但为了简单和移植性,这里介绍的是用Qt自己的绘图工具QPainter绘制PPI二维图像。

实现描述

本例中使用两个类进行绘制,一个是绘制颜色标尺的paintTable类,另一个是绘制PPI扫描图主体的paintWindow类。
paintWindow类的思路就是重写paintEvent()、resizeEvent()、timerEvent()函数。每隔一段时间检查原始数据是否更新;如果数据刷新,通过repaint()函数调用paintEvent()进行重绘;当窗体大小变化时,调用resizeEvent()函数进行重绘;绘制图像的思路是绘制一个个去心的扇型片元,根据原始数据查阅调色盘,把片元绘制成不同的颜色。本例中一个方向上由300个片元组成。
paintTable类即通过几个颜色控制点,绘制一个渐变的色条。通过插值可以算得强度范围内的任意强度的RGB值。
下图即使用同一组模拟数据的扫描显示图:
在这里插入图片描述

代码之路

paintTable类
这里ppi数据强度的范围是-50到50,使用5个控制点。

//paintTable.h
#include <QWidget>
#include <QPainter>
#include <QFont>

class paintTable : public QWidget
{
	Q_OBJECT
public:
	explicit paintTable(QWidget *parent = 0);
protected:
	void paintEvent(QPaintEvent *);
};

//paintTable.cpp
paintTable::paintTable(QWidget *parent) : QWidget(parent)
{
}
void paintTable::paintEvent(QPaintEvent *)
{
	QPainter painter(this);
	int h = height() - 200 -20;
	int w = 20;
	QRectF rect(w, h, 10, 200);
	QLinearGradient linearGradient(w, h, w + 10, h + 200);
	linearGradient.setColorAt(0, QColor(154, 0, 0));
	linearGradient.setColorAt(0.25, QColor(255, 180, 0));
	linearGradient.setColorAt(0.5, QColor(250, 255, 255));
	linearGradient.setColorAt(0.75, QColor(0, 199, 255));
	linearGradient.setColorAt(1, QColor(0, 0, 155));
	painter.setBrush(linearGradient);
	painter.drawRect(rect);

	int det = 200/4;
	painter.drawT
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值