一、以时间轴作为横坐标
Qwtplot 默认是以数值作为横坐标进行绘图的,但是像历史曲线这样的曲线图,应该以时间作为横轴才能更好地反映出时间-数值之间一一对应的关系。可是要如何将数值与时间对应起来呢?
其实,以数值为坐标的曲线图,其实也只是将横轴当做一个个label,所以我们要做的就是把一个个label用时间表示。
查看 QwtScaleDraw类,不难发现它继承自QwtAbstractScaleDraw,而QwtAbstractScaleDraw中有一个虚函数 virtual QwtText label(double v) const ;
因此,我们只要重写这个虚函数就能满足我们的需要——以时间为横轴 。
class TimeScaleDrawR : public QwtScaleDraw
{
public:
TimeScaleDrawR(const QDateTime &base);
virtual QwtText label(double v) const ;
private:
QDateTime m_scaleBaseTime;
};
TimeScaleDrawR::TimeScaleDrawR(const QDateTime &base): m_scaleBaseTime(base){ }
QwtText TimeScaleDrawR::label(double v) const{ QDateTime upTime = m_scaleBaseTime.addSecs((int )v); return upTime.toString("yyyy-MM-dd\nhh:mm:ss");}
在plot类(继承自QwtPlot类)中
QDateTime m_baseTime = QDateTime::currentDateTime();
setAxisScaleDraw(QwtPlot::xBottom,new TimeScaleDrawR(m_baseTime));
自此图像就是时间为横轴
二、如何描点绘制图像
QwtPlotCurve 是Qwt绘制曲线的一个类,它提供了一个方法 setSamples() ,它有多种重载方式。我比较喜欢用
void setSamples( const <