Qwt之QwtDateScaleDraw时间标尺

    Qwt是用于绘制科学图形的Qt库。其中用于绘制坐标和曲线的类是QwtPlot类。QwtPlot提供的坐标默认以数值为单位,例如:(1,2,3,...,61,62...)。但是有些时候需要以时间或日期为单位刻度的标尺。Qwt是提供了这样的功能的。

    QwtPlot类会默认创建两个Scale,也就是标尺,另外QwtPlot提供了方法,允许开发人员对将默认的Scale替换成定制的标尺。因此,只需要创建一个QwtDateScaleDraw对象QwtDateScaleDraw是以时间为刻度的标尺类,并用其替换Plot的默认Scale即可。QwtDateScaleDraw类的继承关系如下所示:

Qwt之QwtDateScaleDraw时间标尺_第1张图片

    替换Plot的默认Scale代码如下:

QwtDateScaleDraw *timeScale = new QwtDateScaleDraw(Qt::LocalTime);

QwtPlot *plot = new QwtPlot();

plot->setAxisScaleDraw(QwtPlot::xBottom, timeScale);

delete plot;

    Qwt帮助文档中setAxisScaleDraw()方法的原型和解释如下:

void QwtPlot::setAxisScaleDraw ( int  axisId,
    QwtScaleDraw  scaleDraw 
  )
By passing scaleDraw it is possible to extend  QwtScaleDraw functionality and let it take place in  QwtPlot . Please note that scaleDraw has to be created with new and will be deleted by the corresponding QwtScale member ( like a child object ).

    翻译过来是说:通过传入scaleDraw参数,可以替代QwtPlot中的QwtScaleDraw,并扩展其功能。请注意,scaleDraw必须使用new关键字创建,作为相关的QwtScale成员,会被像子对象一样删除(笔者注:Qt会自动delete子对象)。

    这就是在上述代码中,只需要delete plot,而不用再delete timeScale了。

    QwtDateScaleDraw允许开发人员对时间刻度的显示方式进行设置,下面的代码将设置在毫秒级别以“Sec 秒:毫秒”的方式显示,在秒及其以上级别以“时:分:秒\n年-月-日”的方式进行显示,其中“\n”表示换行。

QString *scaleFormat;

scaleFormat = new QString("Sec ss:zzz");

timeScale->setDateFormat(QwtDate::Millisecond, *scaleFormat);

delete scaleFormat;

scaleFormat = new QString("hh:mm:ss\nyy-MM-dd");

timeScale->setDateFormat(QwtDate::Second, *scaleFormat);

delete scaleFormat;

最终显示效果如下:

Qwt之QwtDateScaleDraw时间标尺_第2张图片

你可能感兴趣的:(qt,scale,qwt,plot)