Qwt之QwtDateScaleDraw时间标尺

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

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


    替换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;

最终显示效果如下:


评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lionchan187

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值