Qwt类库在二维云图绘制中的应用

时间:2022-06-26 11:36:22

Qwt类库在二维云图绘制中的应用

摘 要: 介绍了Qwt类库在数值模拟软件中的开发方法。首先简要介绍了开发工具Qt和图形库Qwt,然后给出数值模拟软件的可视化分析,最后重点阐述了实现Qwt云图绘制功能的关键技术。通过Qwt在软件中的应用,实现了计算数据的可视化,并取得了良好的云图可视化效果。基于Qwt的开发结果表明,Qwt在数值模拟软件后处理的开发中具有很强的优势。

关键词: Qt; Qwt; 数值模拟软件; 二维云图

中图分类号: TN919?34; TP391.9 文献标识码: A 文章编号: 1004?373X(2014)14?0100?03

Application of Qwt in two?dimensional spectrogram drawing

GAO Fei, YUAN Yuan, LIN Cheng?di, HUANG Shao?hua

(Northwest Institute of Nuclear Technology, Xi’an 710024, China)

Abstract: The exploitation methods of numerical simulation software based on class libraries Qwt are introduced. The deve?

lopment tool Qt and graphic library Qwt are presented briefly. The visualization analysis about the numerical simulation software is described. The key technology to achieve the spectrogram drawing function of Qwt is elaborated. With the application of Qwt in the software, the visualization of the calculated data was realized. The development result of Qwt shows that Qwt has strong superiority in the development of numerical simulation software postprocessing.

Keywords: Qt; Qwt; numerical simulation software; two?dimensional spectrogram

0 引 言

Qwt,全称为Qt Widgets for Technical Applications,是一个面向技术领域的画图组件Qt类库包[1],专门为开发科学领域方面的数值模拟软件提供实用的GUI部件和辅助工具以及常用的二维绘图功能,在此基础上还提供了诸如刻度盘等控件类进行开发使用。Qwt类库基于Qt图形库开发,因而Qwt也继承了Qt的跨平台特性。

Qt图形库是用于桌面系统和嵌入式开发的跨平台图形界面应用程序框架,具有良好的平台无关性和面向对象特性。它包括了直观的应用程序编程接口、丰富的C++类库、用于GUI开发和国际化的集成工具,并支持JAVA和C++语言进行开发[2]。Qt极大地丰富了图形界面的绘制功能,在跨平台的软件系统开发中具有绝对优势。

数值模拟软件开发的目标在于将数值计算获得的大量数据按照其自身的物理背景进行有机结合,用可视化的方式来展示数据所表现的内容及相互关系,进而把握物理过程的整体演进规律。本文通过Qwt类库和Qt图形库在数值模拟软件中的开发应用,根据读入的数据文件实现了数据的二维彩色云图分布,充分体现出Qwt在计算数据可视化方面的优势。

1 Qwt类库简介

1.1 Qt图形库

Qt是挪威Trolltech公司的旗舰产品,作为跨平台的应用程序和UI框架,是开源的桌面系统KDE的基石[3]。它包括了跨平台类库、集成开发工具和跨平台IDE,可以为程序开发者提供顶级的图形用户界面所需的应用功能。

Qt包括一系列满足各种应用的窗口部件集(widgets),窗口部件可以是控件,也可以是容器,在Qt的开发过程中,Qt的各类窗口都是QWidget类或其子类的实例[4]。所以编写Qt应用程序的主要工作就是在继承已有的QWidget类基础上扩展自定义类,以实现其具体功能。图1是QWidget的类继承关系。

在Qt编程中,可以通过设计器规划子窗体的显示位置,也可以编写代码通过布局管理器来进行设置。

图1 QWidget的类继承关系

1.2 Qwt类库

Qwt是一个基于LGPL版权协议的开源项目,利用Qwt库中的类可以快速地生成出符合要求的各种具有专业背景的统计图。Qwt类库为软件程序开发提供了丰富的GUI组件和一组实用类,并最终以二维窗体部件的方式来输出计算数据,其可视化方式包括曲线、罗盘、旋转体等[5]。由于Qwt继承了Qt良好的跨平台性,在所有使用Qt开发的图形界面环境中都可以应用Qwt。

1.3 Qwt开发环境编译

本文所用的编译环境为:vs2010,qt4.8.4,qwt6.0.1,操作系统win7。

打开Qt命令窗口Qt4.8.4 command prompt并进行文件解压,在该文件目录下存放有designer,example,src以及doc文件。Designer文件里是所有Qwt插件的源代码,example文件里是所有Qwt所附例子的源代码,src文件里存放Qwt源代码,doc文件中存放Qwt的帮助文档。

Qwt通过qmake命令编译所有的组件和示例。qmake读取工程文件,工程文件包含了如何编译特定工程的规则。工程文件是以“*.pro”结尾的。

主要编译的三个工程文件为:qwt.pro,designer.pro,examples.pro。

执行完上面的命令后,Qwt组件就编译完成。如果在工程中使用Qwt控件的话,还需要进一步操作。以F:\Qt\Qwt安装在C:\Qt\4.8.4目录下为例:

(1) 将F:\Qt\Qwt\lib的qwtd.dll,qwt.dll拷贝到C:\Qt\4.8.4\bin目录下;

(2) 将F:\Qt\Qwt\lib的qwtd.lib,qwt.lib拷贝到C:\Qt\4.8.4\lib目录下;

(3) 将F:\Qt\Qwt\designer\plugins\designer的qwt_designer_plugin.dll,qwt_designer_plugin.lib拷贝到C:\Qt\4.8.4\plugins\designer目录下;

(4) 将F:\Qt\Qwt\include下的所有文件拷贝到C:\Qt\4.8.4\include目录下。

通过以上步骤即完成了Qwt的编译和配置。

2 数值模拟软件设计实现

2.1 可视化需求分析

随着数值模拟软件的逐步发展,在仿真过程中计算求解的时间逐步缩短,而针对运算结果的“可视化”问题却日益突出[6]。为实现良好的“可视化”效果,众多软件通过建立友好的图形用户界面使用户能够直观快速地将大量的计算数据结果整理成可视图的形式进行操作。

在数值模拟软件开发过程中,通过软件的GUI参数界面输入模型参数和计算参数,调用数值模拟计算模块进行计算,获得大量的计算数据。这些数据抽象且不直观,通过调用Qwt类库进行软件的开发,可以方便地实现数据处理可视化。如图2所示。

当用户在本软件的GUI界面选择“指定高度通量分布”单选按钮后,则在视图区的“图形分析”视图中以二维云图形式绘制“高度指示器”指定高度处路径起点的模型参数。若要显示其他高度处的模型参数,用户可对“高度指示器”进行拖动设置不同高度,如图3所示。

图2 数值模拟软件GUI界面

图3 数值模拟软件GUI界面

2.2 云图绘制功能

QwtPlotItem类是所有绘图控件的基类,可以派生出多个控件对象,如网格(QwtPlotGrid类)、曲线(QwtPlotCurve类)等[7],如图4所示。本文中将用到QwtPlotSpectrogram类。

图4 Qwt类继承图

(1) 定义光栅类

QwtPlotSpectrogram类,频谱图图元,继承自QwtPlotRasterItem类,主要用来绘制云图,显示云图中的三维数据。在绘制过程中,Qt提供了RGB颜色映射表来进行计算数据幅度值的颜色映射[8]。本软件的二维云图中,纵坐标为网格点纬度,横坐标为网格点经度,颜色由中子注量率确定:

d_spectrogram = new QwtPlotSpectrogram(); //定义一个光栅类

(2) 数据栅格化

为了显示算法输出数据,首先须对计算数据进行栅格化。QwtRasterData类定义了可以对任意类型数据进行栅格化的接口,它的派生类根据画布的分辨率和尺寸执行再采样操作,可以将矩阵数据映射到已定义好的栅格中[9]。QwtMatrixRasterData类继承自QwtRasterData类,它主要是对矩阵类型数据进行栅格化,由于本软件的计算参数全部储存在数组中,本文采用QwtMatrixRasterData类进行数据栅格化:

QwtMatrixRasterData::setValueMatrix(Const

QVector& values,size_t numColumns )函数用来分配矩阵值。

QwtPlotSpectrogram::setData(QwtRasterData * data)函数用来进行光栅数据的设置。

(3) 颜色映射

QwtColorMap是一个抽象基类,用来实现数值到颜色的映射功能,用该类实现中子注射率云图的颜色映射。QwtColorMap类有两个派生类,其中一个是QwtLinearColorMap类。该类是根据颜色偏移量来绘制颜色映射,每一个颜色偏移量都是一个特殊位置,以这一偏移量为依据来开始过渡到下一种颜色[10]。

QwtLinearColorMap::addColorStop( double value, const QColor & color)函数用来在0和1之间指定一个颜色偏移量。0是渐变一端的偏移量,1是另一端。

QwtPlotSpectrogram::setColorMap(QwtColorMap * colorMap)函数用来指定图像颜色。

rightAxis?>setColorBarEnabled(true);

rightAxis?>setColorMap(zInterval, new ColorMap());

//设置右边中子注射率颜色条

(4) 设置显示模式

QwtPlotSpectrogram::setDisplayMode(QwtPlotSpectrogram::ImageMode, true); 函数用来设置显示模式。

(5) 添加图元

QwtPlot本身并不具备添加图元的操作,一个图元自己有权力决定被添加到哪个QwtPlot,图元通过以下接口实现这项功能:

void attach(QwtPlot *plot);

图5,图6为Qwt控件显示的计算数据分布云图。

图5 高度为50时计算数据分布云图

图6 高度为70时计算数据分布云图

3 结 语

通过Qwt类库在数值模拟软件中的应用,实现了计算数据的二维彩色云图可视化。与其他的后处理可视化软件相比,Qwt可以极大地简化数值模拟软件的开发流程,缩短软件研发周期,减少重复劳动。充分体现出Qwt控件在数值模拟软件后处理方面的优势。

参考文献

[1] 杨旭光.基于QWT插件实现数据库数据图表显示[J].福建电脑,2012(12):158?159.

[2] 楚颖超.基于Qt_E的嵌入式绿色镀膜监控系统GUI研究与实现[D]. 兰州:兰州交通大学,2011.

[3] 卢华伟.基于Qt/Qwt的操作监控系统的设计与实现[J].微计算机信息,2010,26(1):72?74.

[4] 蔡志明.精通Qt4编程[M].北京:电子工业出版社,2011.

[5] 邵平凡,徐霖.基于Qt 的嵌入式GUI开发的应用研究[J].工业控制计算机,2011,24(10):49?51.

[6] 黄渊,吴磊.基于Qt面向对象程序设计[J].湖南农机,2011,38(5):59?61.

[7] 刘强,庐山鹰.Qt在光学芯片仿真软件设计中的应用[J].电子器件,2011(1):72?74.

[8] [加]布兰切尼.C++GUI Qt 3编程[M].北京:北京航空航天大学出版社,2006.

[9] 王爱文.Linux平台下基于Qt的电子海图的研究与实现[D].哈尔滨:哈尔滨工程大学,2004.

[10] 王靖.浅谈Qt编程[J].电脑开发与应用,2007(10):72?73.

上一篇:在Eclipse中使用RSE框架的探讨 下一篇:基于STM32的空调散热片粉尘自动监测仪的设计