QWT--自定义坐标轴刻度值
一、效果展示
定义xBottom为带单位的刻度值
定义xBottom为分钟:秒数的刻度值
二、具体步骤
2.1、自定义坐标轴
自定义坐标轴刻度,需要继承自QwtScaleDraw
,然后重写如下虚函数:
virtual QwtText label(double v) const;
定义一个规则,然后设置坐标轴范围时,按定义的规则传入即可。
例如,定义mm:ss刻度值:
#ifndef TIMESCALEDRAW_H #define TIMESCALEDRAW_H #include <QWT/qwt_scale_draw.h> #include <QDateTime> class TimeScaleDraw : public QwtScaleDraw { public: TimeScaleDraw(); virtual QwtText label(double v) const; }; #endif // TIMESCALEDRAW_H
#include "timescaledraw.h" TimeScaleDraw::TimeScaleDraw() { } QwtText TimeScaleDraw::label(double v) const { QDateTime dt; dt.setTime_t((int)v); return dt.toString("mm:ss"); }
传入的值是v,但是返回的是一个字符串,这个字符串是实际显示在坐标轴上的刻度值,如果需要刻度值带单位,则可以这样写:
QwtText TimeScaleDraw::label(double v) const { QString ret = ""; ret = QString::number(v)+"mA"; if(ret.isEmpty()) return; else return ret; }
2.2、使用自定义坐标轴
QWT_Area = new QWidget; QWT_Area->resize(this->width(),this->height()); m_Qwt1 = new QwtPlot(QWT_Area); m_Qwt1->resize(this->width(),this->height()); m_Qwt1->setAxisScale(QwtPlot::xBottom,0,10); m_Qwt1->setAxisScale(QwtPlot::yLeft,0,10); m_Qwt1->enableAxis(QwtPlot::xBottom,true); m_Qwt1->enableAxis(QwtPlot::xTop,false); m_Qwt1->enableAxis(QwtPlot::yLeft,true); m_Qwt1->enableAxis(QwtPlot::yRight,false); m_Qwt1->setAxisScaleDraw(QwtPlot::xBottom,new TimeScaleDraw()); m_Qwt1->setAxisScale(QwtPlot::xBottom, QDateTime::currentDateTime().toTime_t() - 100,QDateTime::currentDateTime().toTime_t()); //标尺范围 QWT_Area->show();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
2021-04-07 【Vue】基于UI库二次组件封装——ant design table(包括支持slot插槽)