文章目录
- 一、前言
- 二、添加画布标签
- 三、游标读数
一、前言
在使用QWT绘制曲线的时候,可能需要在画布上标明曲线的信息,例如我最近在做的静态录波,需要标明曲线的物理量,如下所示:
在QWT–数据游标一文中,其实我已经通过自定义图元的方式实现过了。
因为当时没有仔细看QWT源码,就只想到这个方式来实现自己的需求;但是自定义图元有个弊端(应该是我还没玩明白QWT),自定义的图元绘制是在物理坐标上,而不是画布坐标上,也就是说它始终印在我们的窗口的固定位置上,不会随着坐标轴范围的变化而变化。
我的静态录波曲线是可以随意伸缩的,所以曲线物理信息标记需要随着坐标轴范围变化而变化,所以自定义图元的方式就不咋匹配我的需求了;
二、添加画布标签
最近看源码,发现QwtPlotMarker
这个类,有一个接口:
void setLabel( const QwtText& );
QwtText label() const;
原来直接使用官方提供的QwtPlotMarker
就可以实现我的需求,使用示例:
QwtPlotMarker* qwtPlotMarker = new QwtPlotMarker;
QwtText qwtText("Hello World");
qwtText.setColor(QColor(255,0,0));
qwtText.setFont(QFont("Microsoft YaHei", 10, QFont::Bold));
qwtPlotMarker->setLabel(qwtText);
double pos_x = 1;
double pos_y = 1;
qwtPlotMarker->attach(qwtPlot);
qwtPlotMarker->setXValue(pos_x);
qwtPlotMarker->setYValue(pos_y);
测试发现调用lable()
来修改标签文本,无效,需要重新setLabel()才行,例如:
//保持Label字体和颜色和之前一致,只改变文本内容,不改变位置
QwtText qwtText("QwtLabel");
qwtText.setColor(qwtPlotMarker->label().color());
qwtText.setFont(qwtPlotMarker->label().font());
qwtPlotMarker->setLabel(qwtText);
三、游标读数
记录一下自己实现游标读数的一个方式。
首先游标读数也是也是通过上面的QwtPlotMarker实现的;
左侧其实也是1个QwtPlot画布,设置它的X轴范围固定(0~1
),Y轴范围随着右侧画布的Y轴变动,高度和右侧画布一致,这样它们的网格线就完美对齐了。