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
總結
以上是生活随笔為你收集整理的qwt自定义时间标尺TimeScale的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐几个很好的资源下载网站
- 下一篇: 使用ASP.NET广告控件的XML语言创