《QWT的应用.ppt》由会员分享,可在线阅读,更多相关《QWT的应用.ppt(40页珍藏版)》请在三一办公上搜索。
1、QWT的应用,物探研究院二一一年十一月,汇 报 内 容,一、QWT的概念二、QWT的特点三、QWT的安装四、QWT的例子,Qt是什么,Qt是一种C+编程语言,是跨平台的图形用户界面应用程序框架。Qt是完全面向对象、易扩展的高级语言工具,允许组件编程。Qt支持下述操作系统平台:MS/Windows-95、98、NT 4.0、ME、2000、XP、Vista和Win7 Unix/X11-Linux、Sun Solaris、HP-UX、Compaq Tru64 UNIX、IBM AIX、SGI IRIX和其它很多X11平台 Macintosh-Mac OS X Embedded-有帧缓冲(frame
2、buffer)支持的Linux平台,Windows CE。,一、QWT的概念,QWT,全称是Qt Widgets for Technical Applications,是一个面向技术领域的画图组件Qt类库包主要提供一些常见的2D画图功能该工具库属第三方类库,基于Qt开发,所以也继承了Qt的跨平台特性。,什么是QWT,一、QWT的概念,QWT为程序提供图形用户接口(GUI)组件和一组实用类,基于二维方式窗体部件来显示数据。数据源以数值、数组或一组浮点数等方式提供。输出方式可以是:Curves(曲线),Slider(滚动条),Dials(拨号盘),Compasses(仪表盘)scales(进度尺)
3、,sliders(滑动块),thermometers(温度计),wheels(轮子),knobs(旋钮)等窗口元件。,一、QWT的概念,曲线、温度计、刻度盘,一、QWT的概念,QWT是一个基于LGPL版权协议的开源项目。,LGPL的全称是 GNU Lesser General Public License。GNU是一个自由软件工程项目,GNU更宽松通用公共许可证。用GPL声明下的自由软件开发出来的新软件也一定是自由软件。LGPL 则不同,允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。使
4、用GPL声明下的的自由软件开发出来的新软件也一定是自由软件。与GPL的最大不同是,可以私有使用LGPL授权的自由软件,开发出来的新软件可以是私有的而不需要是自由软件。,一、QWT的概念,官方网站 http:/,一、QWT的概念,汇 报 内 容,一、QWT的概念二、QWT的特点三、QWT的安装四、QWT的例子,QWT的特点,开放源代码跨平台特性可作为控件引用类库规范,二、QWT的特点,(87个),QWT基类,QwtAbstractScale:包含刻度尺的所有类的抽象基类;QwtAbstractScaleDraw:绘制刻度尺的抽象基类;QwtAbstractSlider:滑块部件的抽象基类;Qwt
5、AlphaColorMap:可以改变颜色的alpha值;QwtAnalogClock:时钟的模拟类;QwtArrayData:包含2个QwtArray实例的数据类;QwtArrowButton:箭头按钮;QwtClipper:剪贴板类;QwtColorMap:提供数值到颜色的映射功能;QwtCompass:指南针部件;QwtCompassMagnetNeedle:指南针部件的磁针;QwtCompassRose:罗盘部件的抽象基类;QwtCompassWindArrow:风向标的指示器;,二、QWT的特点,常用的类,QwtPlot类似一个二维绘图的容器,里面可以放其他的对象QwtPlotItem
6、派生类对象。这个类负责控制绘图数据的产生和传递,并且绘制一个坐标轴。QwtPlotCurve曲线类,用于绘制各种曲线。QwtPlotMarker标尺类,用于绘制刻度线。QwtData定义任意曲线类型的数据接口,二、QWT的特点,部分包含文件的相互调用关系,二、QWT的特点,汇 报 内 容,一、QWT的概念二、QWT的特点三、QWT的安装四、QWT的例子,文件说明,下载的文件是qwt-5.2.rar 或 qwt-6.0.0.zip,三、QWT的安装,Qwt文件目录,designer目录中存放的是Qwt插件的源码doc目录中存放的是帮助文档example目录中存放的是Qwt的简单例子的源码src目
7、录中存放的是Qwt的源码textengines目录中存放的是数学指标语言的文本驱动引擎代码此外Qwt目录还有 qwt.pro等工程文件,三、QWT的安装,Qwt5.2版在Qt4.3+minGW环境下的安装与使用,qwt的安装很简单,可以参看它的install文档。1.解开下载下来的zip文件,比如解开到d:qtqwt-5.1.1目录下,修改目录下的qwtconfig.pri文件里面的安装路径,比如准备将它安装到d:qtqwt目录下,则 win32 INSTALLBASE=D:/qt/qwt-5.1.1 2.从qt的cmd环境进入qwt-5.1.1目录,运行 qmake qwt.pro make
8、 make install 3.把d:qtqwtlib目录加入到系统PATH变量里面。到这里就已经安装完成了,如果完全成功的话,你可以在qdesigner里面看到有qwt的控件在里面了。,三、QWT的安装,类库的使用,C:QtQwtlib的qwt.dll和qwt.lib分别拷贝到D:qt4.3.2bin和D:qt4.3.2lib(以qt安装在D:qt4.3.2目录下为例)目录下。再将D:QtQwtdesignerpluginsdesigner目录下的qwtplugin.dll和qwtplugin.lib拷贝到D:Qt4.3.2pluginsdesigner目录下。再将D:QtQwtinclud
9、e目录下的所有文件拷贝到D:Qt4.3.2include目录下。这样就完成了Qwt的编译和配置工作了。,三、QWT的安装,在Designer中绘制用户界面时,就可以看到界面左侧的ToolBox工具箱中增加了“Qwt”类型的控件。在设计用户界面时就可以像使用其它Qt控件一样使用Qwt组件了。程序中要增加库文件qwt.lib,在编译后会自动的把包含的头文件包含到程序中。,直接使用源代码 D:/qt/qwt-5.1.1/src目录下的两类文件(1)qwt_*.h 头文件(2)qwt_*.cpp程序文件 拷贝到应用目录直接引用,省去路径及环境配置的繁琐。,三、QWT的安装,汇 报 内 容,一、QWT的
10、概念二、QWT的特点三、QWT的安装四、QWT的例子,1、曲线图curvdemo1,四、QWT的例子,const int Size=27;for(i=0;iSize;i+)xvali=double(i)*10.0/double(Size-1);yvali=sin(xvali)*cos(2.0*xvali);,给6组数据赋值X值的27点为步长节点Y值是两个三角函数的积,四、QWT的例子,QwtPlotCurve crv6;QwtSymbol sym;i=0;sym.setStyle(QwtSymbol:Cross);sym.setPen(QColor(Qt:black);sym.setSize(
11、5);crvi.setSymbol(sym);crvi.setPen(QColor(Qt:darkGreen);crvi.setStyle(QwtPlotCurve:Lines);crvi.setCurveAttribute(QwtPlotCurve:Fitted);i+;sym.setStyle(QwtSymbol:Ellipse);sym.setPen(QColor(Qt:blue);sym.setBrush(QColor(Qt:yellow);sym.setSize(5);crvi.setSymbol(sym);crvi.setPen(QColor(Qt:red);crvi.setSty
12、le(QwtPlotCurve:Sticks);i+;crvi.setPen(QColor(Qt:darkBlue);crvi.setStyle(QwtPlotCurve:Lines);i+;,分6组分别设置曲线节点的样式以及曲线的风格样式。,crvi.setPen(QColor(Qt:darkBlue);crvi.setStyle(QwtPlotCurve:Lines);crvi.setRenderHint(QwtPlotItem:RenderAntialiased);i+;crvi.setPen(QColor(Qt:darkCyan);crvi.setStyle(QwtPlotCurve:
13、Steps);i+;sym.setStyle(QwtSymbol:XCross);sym.setPen(QColor(Qt:darkMagenta);crvi.setSymbol(sym);crvi.setStyle(QwtPlotCurve:NoCurve);i+;,for(i=0;i6;i+)crvi.setRawData(xval,yval,Size);,给6组曲线加载数据。,四、QWT的例子,void MainWin:drawContents(QPainter*painter)int deltay,i;QRect r=contentsRect();deltay=r.height()/6
14、-1;r.setHeight(deltay);for(i=0;idevice()-paintEngine();if(pe-hasFeature(QPaintEngine:Antialiasing)painter-setRenderHint(QPainter:Antialiasing,crvi.testRenderHint(QwtPlotItem:RenderAntialiased);crvi.draw(painter,xMap,yMap,r);shiftDown(r,deltay);,分6个区域分别绘制曲线。,四、QWT的例子,工区边界,2、散点图Realtime_plot,四、QWT的例子,
15、void MainWindow:appendPoints(bool on)if(on)d_plot-append(d_timerCount-value(),d_randomCount-value();else d_plot-stop();,曲线赋值,四、QWT的例子,void IncrementalPlot:appendData(double x,double y)appendData(,曲线赋值,定义节点风格,四、QWT的例子,void CurveData:append(double*x,double*y,int count)int newSize=(d_count+count)/1000+
16、1)*1000;if(newSize size()d_x.resize(newSize);d_y.resize(newSize);for(register int i=0;i count;i+)d_xd_count+i=xi;d_yd_count+i=yi;d_count+=count;,数据赋值的实现,四、QWT的例子,观测系统模板显示,3、光谱图和等高线图 spectrogram,QToolButton*btnSpectrogram=new QToolButton(toolBar);QToolButton*btnContour=new QToolButton(toolBar);QToolB
17、utton*btnPrint=new QToolButton(toolBar);,connect(btnSpectrogram,SIGNAL(toggled(bool),d_plot,SLOT(showSpectrogram(bool);connect(btnContour,SIGNAL(toggled(bool),d_plot,SLOT(showContour(bool);connect(btnPrint,SIGNAL(clicked(),d_plot,SLOT(printPlot();,定义三个按钮,以信号槽方式定义按钮的响应函数,d_spectrogram=new QwtPlotSpec
18、trogram();d_spectrogram-setData(SpectrogramData();d_spectrogram-attach(this);QwtValueList contourLevels;for(double level=0.5;level setContourLevels(contourLevels);,定义为一个光栅类,设置光栅类数据,设置等高线数值,四、QWT的例子,SpectrogramData():QwtRasterData(QwtDoubleRect(-1.5,-1.5,3.0,3.0)virtual QwtRasterData*copy()constretur
19、n new SpectrogramData();virtual QwtDoubleInterval range()constreturn QwtDoubleInterval(0.0,10.0);virtual double value(double x,double y)const const double c=0.842;const double v1=x*x+(y-c)*(y+c);const double v2=x*(y+c)+x*(y+c);return 1.0/(v1*v1+v2*v2);,光栅类数据,区域内各点的取值,四、QWT的例子,覆盖次数,4、直方统计图histogram,四
20、、QWT的例子,QwtPlotItem的分类,QwtPlotItem的返回值定义,HistogramItem*histogram=new HistogramItem();,四、QWT的例子,QwtArrayintervals(numValues);QwtArray values(numValues);double pos=0.0;for(int i=0;i setData(QwtIntervalData(intervals,values);histogram-attach(,直方图类加载数据,附加到绘图基类,数据结构定义,分段与数据取值的定义,四、QWT的例子,QwtIntervalData data;void HistogramItem:draw(QPainter*painter,const QwtScaleMap,画直方条块,四、QWT的例子,敬请批评指正,