项目场景:
qwt项目中开发中有个需求是设置zoomBase的x轴范围,比当前范围要小。但是当前x轴范围不可以变化。
问题分析
QwtPlotZoomer类设置zoomBase,如果当前x轴范围比设置的矩形x轴范围大,则设置失败。
此时zoomBase默认设置为plot当前范围的矩形。
解决方案:
如果想设置比当前x轴范围小的zoomBase。
- 先把当前x轴范围记录下来。
const auto xAxisDiv = m_qwtPlot->axisScaleDiv(QwtPlot::xBottom);
-
设置当前范围为你想要设置的zoomBase。调用QwtPlot中的 void setAxisScale( int axisId, double min, double max, double step = 0 )函数。
-
设置zoomBase。调用QwtPlotZoomer中的setZoomBase( const QRectF & )函数
-
设置成功了之后。把记录下来的x轴范围恢复。
m_qwtPlot->setAxisScaleDiv(QwtPlot::xBottom, xAxisDiv);
这样我们就达到了想要的效果,既设置了zoomBase,又能保证当前的x轴范围不变。