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));


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM