• 欢迎浏览“String me = Creater\忠实的资深Linux玩家;”,请文明浏览,理性发言,有侵犯你的权益请邮件我(creater@vip.qq.com).
  • 把任何的失败都当作一次尝试,不要自卑;把所有的成功都想成是一种幸运,不要自傲。
  •    4年前 (2014-04-20)  qwt 评论关闭  12 
    文章评分 0 次,平均分 0.0

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

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

    第二段代码段生成的图片为:
    使用Qwt之QwtDateScaleDraw时间标尺

     

    除特别注明外,本站所有文章均为String me = "Creater\忠实的资深Linux玩家";原创,转载请注明出处来自http://unix8.net/home.php/3368.html

    关于
    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享