void QCPAxisRect::zoomEvent(double scalex, double scaley, QPoint pos)
{
if (mRangeZoomHorzAxis.data())
{
mRangeDragHorzAxis.data()->moveRange(mRangeZoomHorzAxis.data()->pixelToCoord(pos.x()) - mRangeZoomHorzAxis.data()->pixelToCoord(this->center().x())); //Сдвиг позиции масштабирования в центр
mRangeZoomHorzAxis.data()->scaleRange(scalex, mRangeZoomHorzAxis.data()->pixelToCoord(this->center().x())); //Масштабирование относительно центра
}
if (mRangeZoomVertAxis.data())
{
mRangeDragHorzAxis.data()->moveRange(mRangeZoomHorzAxis.data()->pixelToCoord(pos.y()) - mRangeZoomHorzAxis.data()->pixelToCoord(this->center().y()));
mRangeZoomVertAxis.data()->scaleRange(scaley, mRangeZoomVertAxis.data()->pixelToCoord(this->center().y()));
}
mParentPlot->replot();
}
connect(ui->customPlot, SIGNAL(mousePress(QMouseEvent*)), this, SLOT(mousePress(QMouseEvent*)));
connect(ui->customPlot, SIGNAL(mouseRelease(QMouseEvent*)), this, SLOT(mouseRelease(QMouseEvent*)));
void MainWindow::mousePress(QMouseEvent *event)
{
p1 = event->pos();
}
void MainWindow::mouseRelease(QMouseEvent *event)
{
p2 = event->pos();
double w = abs(p1.x()-p2.x());
double h = abs(p1.y()-p2.y());
if (w > 50 && h > 50) {
if (event->button() == Qt::LeftButton)
{
double deltax = 0;
double deltay = 0;
deltax =w/ui->customPlot->axisRect()->width();
deltay =h/ui->customPlot->axisRect()->height();
ui->customPlot->axisRect()->zoomEvent(deltax, deltay, QPoint((p1.x()+p2.x())/2,(p2.y()+p2.y())/2)); //deltax и deltay - коэффициенты масштабирования, QPoint((p1.x()+p2.x())/2,(p2.y()+p2.y())/2) - позиция масштабирования.
}
}
}