QGraphicsView Powiększanie i zmniejszanie pozycji myszy za pomocą kółka myszy

Mam aplikację zQGraphicsView okno na środku ekranu. Chcę móc powiększać i pomniejszać za pomocą kółka myszy.

Obecnie ponownie wdrożyłemQGraphicsView i przesłonić funkcję przewijania myszy, aby nie przewijała obrazu (tak jak domyślnie).

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

więc kiedy przewijam, emituję sygnał true, jeśli kółko myszy jest fałszywe, jeśli kółko myszy jest z powrotem.

Następnie podłączyłem ten sygnał do gniazda (funkcja zoompatrz poniżej) w klasie, która obsługuje moje rzeczy z GUI. Teraz zasadniczo myślę, że moja funkcja powiększania po prostu nie jest najlepszym sposobem, aby to zrobić w ogóle. Widziałem kilka przykładów osób używających funkcji nadpisywania ustawień, aby ustawić skale, ale nie mogłem znaleźć kompletnej odpowiedzi.

Zamiast tego zrobiłem to, ale w żadnym wypadku nie jest to idealne rozwiązanie, więc szukam tego, aby było to nieco ulepszone lub dla przykładu roboczego przy użyciu skali w funkcji zdarzenia koła.

Inicjalizujęm_zoom_level do0 w konstruktorze.

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);
    }
}

Jak widać powyżej używamQMatrix i przeskalowanie go i ustawienie go w Widoku Grafiki oraz ustawienie kotwicy transformacji na pod mysz, ale po prostu nie działa idealnie czasami, gdy przewijam ładunki, zacznie się powiększać tylko (co, moim zdaniem, ma związek z pętlą int ponad czy coś).

Jak już wspomniałem, pomoc przy tym lub dobrym przykładzie skali pod myszką byłaby świetna.

questionAnswers(11)

yourAnswerToTheQuestion