使用Qwt之QwtDateScaleDraw时间标尺

2014年4月20日 由 Creater 留言 »

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

QwtPlot类会默认创建两个Scale,也就是标尺,另外QwtPlot提供了方法,允许开发人员对将默认的Scale替换成定制的标尺。因此,只需要创建一个QwtDateScaleDraw对象QwtDateScaleDraw是以时间为刻度的标尺类,并用其替换Plot的默认Scale即可。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 QwtScaleDrawfunctionality 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成员,会被像子对象一样删除。
这就是在上述代码中,只需要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;

第二段代码段生成的图片为:
2

广告位

评论已关闭.