基于QCustomPlot和Qt的曲线绘制及显示技术

2017-07-01 16:17钟权沈静波路伟欣
科技视界 2017年6期

钟权++沈静波++路伟欣

【摘 要】为了能够从多个角度更加直观地显示雷达探测目标的参数信息。提出一种在Qt平台下开发的基于QcustomPlot的曲線绘制和显示技术。该技术可以方便灵活的定制曲线窗和曲线外观,简化了曲线窗的绘制流程,降低了曲线窗绘制显示技术的开发难度。在某型雷达显控软件中,使用该技术对雷达的参数进行曲线化显示。结果表明,该技术可以清晰流畅且直观地显示雷达参数的变化情况。

【关键词】曲线绘制;QCustomPlot;Qt平台;雷达显示

Display Technique of Curve Plotting based on QCustomPlot and Qt

ZHONA Quan1,2,3 SHEN Jing-bo1,2,3 LU Wei-xin1

(1.No.38 Research Institute, China Electronics Technology Group Corporation,Hefei Anhui 230088,China;

2.Key Laboratory of Aperture Array and Space Detection,Hefei Anhui 230088,China;

3.Key Laboratory of Intelligent Information Processing,Hefei Anhui 230088,China)

【Abstract】In order to display the information detected by radar more intuitionistic in many aspects.A method of curve plotting and display based on QCustomPlot working on the Qt platform was proposed.It can customize the appearance of windows and curves neatly,simplify the process flow of curve plotting, and make the development easier.The method had been used for displaying the information in some kind of radar.It indicated that the technique can display the change of radar parameters clearly and fluently.

【Key words】Curve plotting;QCustomPlot based;Qt Platform;Display of radar

随着情报雷达探测手段和信号处理方式的不断进步,呈现给操作人员的信息也在不断增多。为了展示这些参数信息,传统的情报雷达给出了包括P显、B显、E显、A显等多种二维显示方式。这些显示方式给雷达操作人员提供了极大的帮助,例如,A显信息使他们能够直观感受目标强度信息在方位上随距离变化的情况,从而做出更加精准的判断和决策。这些信息往往是以二维曲线的方式展现的[1]。雷达显示软件为了绘制曲线信息,也采用了多种第三方库和插件来解决这个问题。在工程实践中较为常用的有TeeChart[2]、qwt[3-6]等,其中TeeChart表现形式丰富,但是并不开源,对于开发者而言,开发成本较高;qwt具有跨平台的属性,代码开源,但是在实际应用过程中,在一些精细的显示细节上不能满足项目需要。本文提出一种在Qt平台下开发的基于QCustomPlot的多曲线窗绘制及显示方法,可以在一个界面同时显示多个曲线窗,改善了传统情报雷达只能显示一个曲线窗体的弊端。在接收雷达探测和处理过的目标参数信息后,多曲线窗可以通过简单配置来改变需要显示的参数项,通过简单操作来突出显示效果。这些参数信息分布在各个子窗上,可以同步显示,方便操作人员从多个角度直观的观察目标参数的变化情况,从而作出更精准的判断。该方法配置简单、使用方便,并且具有跨平台属性,可以很好的解决上述第三方库和控件存在的问题,并将这些参数信息以更好的方式显示给操作人员。

1 相关技术简介(QCustomPlot介绍)

QCustomPlot是在Qt框架下实现的基于LGPL版权协议的开源项目。主要用来对二维曲线的绘制和数据的可视化。它不需要进一步的库依赖,而且文档丰富,使用方便,便于开发人员快速进入开发状态。

2 曲线绘制及显示技术的实现

2.1 曲线窗模块数据处理流程

本文主要针对的是雷达显示软件上的曲线窗显示模块,所以在讨论过程中,曲线窗中的数据均是与雷达显示相关的航迹参数信息。基于QCustomPlot的曲线窗显示和绘制模块主要包括数据接收、数据管理、人机交互和显示绘制等模块,其结构组成如图1所示。数据接收模块从网络中接收雷达的航迹参数信息;数据管理模块包括对所有航迹批数据的管理、对当前需要显示航迹批的批号管理、重点关注批的批号管理等;人机交互模块负责曲线窗模块的外部操作接口;显示绘制模块是指在Qt平台下,使用QCustomPlot控件来绘制由数据管理模块所管理的数据,并将绘制结果显示出来。

2.2 曲线窗主界面设计

曲线窗主界面由多个子窗体组成,CzCurvesWindowBase类用来定义子窗体类。曲线窗的具体结构如下:

QList m_CurveCurrentIds; //当前显示的航迹批号

QList m_CurveCurrentSelIds; //重点关注批的批号

QList m_pzTabWnd; //曲线窗子窗体链表

曲线窗主界面主要负责将接收到的航迹参数数据分发到各个子窗体结构中。并提供人机操作接口,将当前需要显示的航迹批号和需要重点关注的批号信息分发到各个子窗体中。

2.3 子窗体数据管理设计

对于每个子窗体而言,需要绘制多条不同批号的曲线,由QList来表示。不同的曲线对应着不同的批号、亮度、点集数据集以及是否加载所有的数据信息,这些信息由结构CurveData表示。具体数据结构如下:

struct CurveData //曲线数据

{

unsigned long id; //批号

int nAlpha; //亮度

bool bIsAllData; //是否加载所有数据

QList points; //点集

};

QList m_CurveData; //曲线数据

QList m_CurveCurrentIds; //当前显示的航迹批号

QCustomPlot* m_Plot; //曲线显示图

其中,变量m_CurveCurrentIds保存了当前需要显示的航迹批号。变量m_Plot是QCustomPlot类的对象,通过该变量,可以直接调用QCustomPlot的各种绘制方法。

2.4 子曲线窗的绘制和显示技术

对子曲线窗的操作主要通过QCustomPlot类的对象来进行。

2.4.1 定义子曲线窗和曲线显示的外观

使用QCustomPlot类所派生的对象来定义子窗体外观的代码如下:

m_Plot->plot->xAxis->setBasePen(QPen(QColor("#f0f0f0")));//设置x轴的颜色

m_Plot->plot->xAxis->setTickPen(QPen(QColor("#f0f0f0")));//设置x轴主刻度的颜色

m_Plot->plot->xAxis->setSubTickPen(QPen(QColor("#f0f0f0")));//设置x轴子刻度的颜色

m_Plot->plot->xAxis->setTickLabelFont(QFont("微软雅黑", 10));//设置x轴刻度标记的字体

m_Plot->plot->xAxis->setTickLabelColor(QColor(238, 238, 238));//设置x轴刻度标记的颜色

m_Plot->plot->yAxis->setBasePen(QPen(QColor("#f0f0f0")));//设置y轴的颜色

m_Plot->plot->yAxis->setTickPen(QPen(QColor("#f0f0f0")));//设置y轴主刻度的颜色

m_Plot->plot->yAxis->setSubTickPen(QPen(QColor("#f0f0f0")));//设置y轴子刻度的颜色

m_Plot->plot->yAxis->setTickLabelFont(QFont("微軟雅黑", 10));//设置y轴刻度标记的字体

m_Plot->plot->yAxis->setTickLabelColor(QColor(238, 238, 238));//设置y轴刻度标记的颜色

m_Plot->plot->setBackground(QBrush(Qt::NoBrush));//设置窗体背景的画刷

使用QCustomPlot类所派生的对象来定义子窗体中曲线的显示样式的代码如下:

m_Plot->plot->legend->setVisible(true);//设置图例说明是否可见

m_Plot->plot->graphs[id]->setScatterStyle((QCPScatterStyle::ScatterShape)uiselctScatterStyle); //设置点的样式

m_Plot->plot->graphs[id]->setLineStyle((QCPGraph::LineStyle)uilineStyle);//设置线条的样式

QCustomPlot类还给出了其它一些定义子曲线窗和曲线显示外观的函数

2.4.2 数据的更新

调用QCustomPlot::addData(double x, double y)函数将实时的曲线点加入到曲线点集中,调用QCustomPlot::replot()函数重绘当前子窗体中的显示。

2.4.3 数据的删除

调用QCustomPlot::removeGraph(graphs[id])函数删除给定批号的曲线,调用QCustomPlot::replot()函数重绘删除某些曲线后的实时显示。

3 应用实例

(b)

图2 曲线窗的显示效果

在某项目中采用Qt4.8.0进行曲线窗绘制和显示的开发设计,显示效果如图2所示。实际应用表明,该曲线窗可以很好的满足项目的实际需要,并且能够方便的移植到新的项目中去,在不同的平台上表现一致。

4 结论

本文提出一种在Qt平台下开发的基于QcustomPlot的曲线绘制和显示技术。该技术可以方便灵活地在一个界面同时显示多个曲线子窗,丰富了雷达参数信息的显示效果,简化了曲线窗的绘制流程,降低了曲线窗绘制显示技术的开发难度。该技术已经应用在多款雷达显控软件中。应用结果表明,该技术可以清晰流畅且直观地显示雷达参数的变化情况。

【参考文献】

[1]丁鹭飞,耿富录.雷达原理[M].4版.西安:西安电子科技大学出版社,2009:4.

[2]陈俊良,叶林,葛俊锋,等.TeeChart控件在实时检测系统上位机软件中的应用[J].2015,28(6):13-15.

[3]高菲,袁媛,林成地,等.Qwt类库在二维云图绘制中的应用[J].现代电子技术,2014,37(14):100-102.

[4]XU H,SHAN P,CHEN K,et al.Design and implementation of limestone activity real-time detection system based on Qt/Qwt[C]//ICMMCCE 2015:1444-1448.

[5]许豪,张政,陈可.基于Qwt的实时波形绘制的实现[J].电子技术与软件工程,2014(23):70.

[6]沈静波,钟权,赵艳丽.基于QwtPlot3D的雷达三维回波显示技术[J].空军预警学院学报,2016,30(2):86-88.

[责任编辑:田吉捷]