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.