QGraphicsView Увеличение и уменьшение изображения при помощи колесика мыши

У меня есть заявление сQGraphicsView окно в середине экрана. Я хочу иметь возможность увеличивать и уменьшать масштаб с помощью колесика прокрутки мыши.

В настоящее время я повторно реализовалQGraphicsView и переопределить функцию прокрутки мыши, чтобы она не прокручивала изображение (как это происходит по умолчанию).

void MyQGraphicsView::wheelEvent(QWheelEvent *event)
{
    if(event->delta() > 0)
    {
        emit mouseWheelZoom(true);
    }
    else
    {
        emit mouseWheelZoom(false);
    }
}

поэтому при прокрутке я издаю сигнал true, если колесо мыши вперед, false, если колесо мыши назад.

Затем я подключил этот сигнал к слоту (функция масштабированияСмотри ниже) в классе, который обрабатывает мои вещи GUI. Теперь, в принципе, я думаю, что моя функция масштабирования просто не лучший способ сделать это. Я видел несколько примеров людей, использующих переопределенную функцию wheelevent для установки шкал, но я не смог найти полного ответа.

Так что вместо этого я сделал это, но он не идеален ни в коем случае, поэтому я ищу, чтобы это немного подправили или для рабочего примера с использованием масштаба в функции события wheel.

Я инициализируюm_zoom_level в0 в конструкторе.

void Display::zoomfunction(bool zoom)
{
    QMatrix matrix;

    if(zoom && m_zoom_level < 500)
    {
        m_zoom_level = m_zoom_level + 10;
        ui->graphicsView->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
        matrix.scale(m_zoom_level, m_zoom_level);

        ui->graphicsView->setMatrix(matrix);
        ui->graphicsView->scale(1,-1);
    }
    else if(!zoom)
    {
        m_zoom_level = m_zoom_level - 10;
        ui->graphicsView->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
        matrix.scale(m_zoom_level, m_zoom_level);

        ui->graphicsView->setMatrix(matrix);
        ui->graphicsView->scale(1,-1);
    }
}

Как вы можете видеть выше, я используюQMatrix и масштабируя это и устанавливая его в Graphicsview и устанавливая привязку преобразования под мышью, но иногда это просто не работает идеально, если я прокручиваю нагрузки, он просто начинает только увеличивать масштаб (что, я думаю, связано с циклом int более или что-то).

Как я уже сказал, помощь с этим или хорошим примером масштабирования под мышью была бы отличной.

Ответы на вопрос(11)

Ваш ответ на вопрос