我对qwtpot放大进行了条件限制,当X坐标轴横坐标最大值-最小值<0.3时不允许再放大,即无论qwtplotzoomer如何框选都不会再放大。
accept函数是qwtplotzoomer中的虚函数,我重新写了一个子类继承自qwtplotzoomer,然后重写了这个虚函数。这个虚函数的作用就是判断qwtplotzoomer框中的矩形框是否符合要求,如果符合要求就将矩形框中的部分进行放大,不符合就不放大。在这个虚函数中可以加入自己的代码,比如不满足某些条件就return false,这时就不会进行放大。
class Zoomer :public QwtPlotZoomer
{
Q_OBJECT
public:
QString m_vCurveType;
Zoomer(QString curveType,QWidget *canvas, bool doReplot = true) :QwtPlotZoomer(canvas, doReplot)
{
m_vCurveType = curveType;
}
protected:
virtual bool accept(QPolygon & pa) const
{
const QwtPlot *plot = QwtPlotPicker::plot();
if ((m_vCurveType == "0" || m_vCurveType=="1")&&(plot->axisScaleDiv(QwtPlot::xBottom).interval().maxValue() - plot->axisScaleDiv(QwtPlot::xBottom).interval().minValue() < 0.3))
return FALSE;
else if (m_vCurveType == "2" && (plot->axisScaleDiv(QwtPlot::yLeft).interval().maxValue() - plot->axisScaleDiv(QwtPlot::yLeft).interval().minValue() < 15))
return FALSE;
return QwtPlotZoomer::accept(pa);
}
}