Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QCustomPlot, масштабирование.
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
Amadey
Кто работал с QCustomPlot, подскажите есть ли возможность масштабирование выделением, т.е. выделяем прямоугольником область графика и график отражает только выделенную область?
Amadey
Решил сделать самостоятельно.
Добавил в QCustomPlot функцию:
Раскрывающийся текст

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) - позиция масштабирования.
        }
    }
}


С масштабом всё верно, но позиция масштабирования не совпадает не могу понять в чём дело.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.