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

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

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

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

поэтому, когда я прокручиваю, яm испускает сигнал 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 и установка привязки преобразования под мышью, но иногда это просто не работает идеально, если я 'm, прокручивая загрузки, он только начнет увеличивать масштаб (что, я думаю, связано с циклом int или чем-то в этом роде).

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

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

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