void moveCanvas( int dx, int dy ) { if ( dx == 0 && dy == 0 ) return; if (!mPlot->isStopped()) dx = 0; for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ ) { const QwtScaleMap map = mPlot->canvasMap( axis ); #if QWT_VERSION < 0x060102 const QwtScaleDiv* scaleDiv = mPlot->axisScaleDiv( axis ); #else const QwtScaleDiv* scaleDiv = &mPlot->axisScaleDiv( axis ); #endif const double p1 = map.transform( scaleDiv->lowerBound() ); const double p2 = map.transform( scaleDiv->upperBound() ); double d1, d2; if ( axis == QwtPlot::xBottom || axis == QwtPlot::xTop ) { d1 = map.invTransform( p1 - dx ); d2 = map.invTransform( p2 - dx ); } else { d1 = map.invTransform( p1 - dy ); d2 = map.invTransform( p2 - dy ); } mPlot->setAxisScale( axis, d1, d2 ); } mPlot->flagAxisSyncRequired(); mPlot->replot(); }