使用Qwt绘制历史曲线

本文介绍如何使用Qwt库在Qt应用程序中以时间轴为横坐标绘制历史曲线。通过重写QwtScaleDraw的label()函数实现时间标签,并详细展示了如何描点绘制图像以及实现实时鼠标跟踪显示当前点的时间-数值信息。

一、以时间轴作为横坐标

  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 <
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值