qwt自定义时间标尺TimeScale

需要重载QwtScaleDraw类的virtual QwtText label(double)const;方法

该方法在需要绘制scale label时会调用。

主要思路是标尺上的点对应QDateTime::toTime_t()的值。然后重载label方法,在QwtText label(double v) const 方法中将参数v转化为QDateTime对象,再转为QString。

timescaledraw.h

#ifndef TIMESCALEDRAW_H
#define TIMESCALEDRAW_H

#include <qwt_scale_draw.h>
#include <QDateTime>

class TimeScaleDraw : public QwtScaleDraw
{public:
    TimeScaleDraw();
    virtual QwtText label(double) const;
};

#endif // TIMESCALEDRAW_H

 

timescaledraw.cpp

#include "timescaledraw.h"

TimeScaleDraw::TimeScaleDraw()
{
}

QwtText TimeScaleDraw::label(double v) const
{
    QDateTime datetime;datetime.setTime_t((uint)v);
return QwtText(datetime.date().toString(Qt::ISODate); }

调用方法:

qwtplot->setAxisScaleDraw(QwtPlot::xBottom, new TimeScaleDraw());

-------------------------------------------------------

实现之后发现一个问题,就是当qwt标尺的label在左右两端显示时,会把标尺撑得变形。可以利用重载的label方法判断在左右两端附近时返回一个空的QwtText即可。

具体代码如下:

timescaledraw.h

#ifndef TIMESCALEDRAW_H
#define TIMESCALEDRAW_H

#include <qwt_scale_draw.h>
#include <QDateTime>

class TimeScaleDraw : public QwtScaleDraw
{
double minLabelPos, maxLabelPos; public: TimeScaleDraw(const double minLabelPos, const double maxLabelPos); virtual QwtText label(double) const; void myinit(const double minLabelPos, const double maxLabelPos); }; #endif // TIMESCALEDRAW_H

 

timescaledraw.cpp

#include "timescaledraw.h"

TimeScaleDraw::TimeScaleDraw(const double minLabelPos, const double maxLabelPos)
{
myinit(minLabelPos, maxLabelPos);
} QwtText TimeScaleDraw::label(double v) const { QDateTime datetime; if(v < minLabelPos || v > maxLabelPos) return QwtText(); datetime.setTime_t((uint)v);return QwtText(datetime.date().toString(Qt::ISODate); } void TimeScaleDraw::myinit(const double minLabelPos, const double maxLabelPos) {
this->minLabelPos = minLabelPos; this->maxLabelPos = maxLabelPos; }

调用方法:

qwtplot->setAxisScaleDraw(QwtPlot::xBottom, new TimeScaleDraw(xx, xxxx));

转载于:https://www.cnblogs.com/oceanking/archive/2012/09/13/2683315.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值