最近研究了一些Qwt,至此总结Qwt的认识以便以后的备忘
从什么方面开始说起呢?
从这个类是什么?可以用来做什么?
关于Qwt的简介就不说了。主要说说其中用到的几个类吧
- QwtPlot
是一个2D画图控件(Widget
)。继承于QFram
和QwtPlotDict
。严格的说来,它只是一个视图窗口,真正的绘制设备是它的中心部件QwtPlotCanvas
类。在它的画布上可以显示无限定数量的图表项(Plot Item),图表项可以是一个曲线(QwtPlotCurve),标记(QwtPlotMarker ),网格(QwtPlotGrid)或者其它由QwtPlotItem
派生出的控件。一个图表有四个坐标轴。分别有四个枚举变量对应(yLeft yRight xBottom xTop
)QwtPlotDict
类是一个Item的字典,用于管理添加到QwtPlot上的所有图元项。它按照Z值的递增顺序组织items.Z值越大越显示在图表的最表面。所有由QwtPlotItem
派生出的类需要使用item的attach
函数依附到图表上。 - QwtPlotItem
所有项的基类(base class for items)显示在图表的画布上。QwtPlotItem是一个抽象类,当你需要派生出一个新的QwtPlotItem类时,需要实现YourPlotItem::draw()方法。在draw中可以绘制你想要的图表项。比如说自定义背景图 - QwtPlotCurve
通过此类中的构造函数来设置曲线的渲染方式(绘画反锯齿setRenderHint
),设置曲线的颜色,曲线是否显示与坐标轴之间的矩形区域,用于绘制曲线,可以设置曲线与坐标轴之间的阴影部分。 - QwtLegend
简单的图例,就是图表右上方的颜色方格+标签,可以实现图例的点击事件来达到是否显示图例对应曲线的效果。 - QwtScaleDraw
用于自定义坐标轴的刻度绘制。比如:时间刻度轴。使用时继承QwtScaleDraw这个类,然后实现该类的label的虚函数,其中的参数v,猜测是通过engine计算而来的数值 - QwtSymbol 用于显示图表的标记,即每一个数据在图表上都会存在一个类型的标记。通过此类的构造函数中可以显示出各种各样的标记
- 一些问题的总结
setAxisMaxMajor(QwtPlot::xBottom,10);//设置坐标轴的最大间隔为10,也就是将一屏的刻度分为10个大间隔。
setAxisMaxMinor(QwtPlot::xBottom,10);//设置一个大间隔中显示1个小间隔,即不显示小刻度线。
//如果没有设置最大间隔,坐标轴的值会由于拖动,缩放等原因间隔会发生变化。
- 通过QObject的
startTimer
函数启动一个计时器事件与timerEvent
的事件函数对应。可以用来绘制动态曲线
关于Qwt的一些example的注释
CpuPlot 动态曲线
barchart柱形图
借鉴文章:
Qwt源码解读之QwtPlot类