wie pan images in QGraphicsView
Ich bin derzeit in der Lage zu laden, mein Bild in ein grahpics Szene, und dann wieder in eine QGraphicsViewer.
Ich bin in der Lage, implementieren eine zoom-Funktion von dtecting ein QEvent::Rad-und rufen dann den graphicsViews der scale () - Funktion.
Aber ich kann nicht scheinen, um herauszufinden, wie man die pan-Funktionalität arbeiten. Ich wollen im Grunde, zu erkennen, wenn eine Maus klickt unten auf das Bild, und verschieben Sie das Bild nach Links, rechts, oben oder unten zusammen mit der Maus.
Als jetzt, ich haben im Grunde ein MouseFilter Klasse, ist die Erkennung von Ereignissen, und Sie tun verschiedene Dinge, je nach event-Typ. Ich befestigt, die Zuhörer auf die QGraphicsView Objekt
Du musst angemeldet sein, um einen Kommentar abzugeben.
QGraphicsView hat build-in-Maus-panning unterstützt. Richtig eingestellt DragMode und es wird den rest erledigen. Benötigen Sie die Bildlaufleisten aktivieren damit das funktioniert.
Den Fall, dass jemand Fragen, ist, wie zu tun es auf Ihre eigene, es ist eigentlich ganz einfach. Hier der code aus meiner app:
Müssen Sie zum speichern die start-position des drag, z.B. so (ich habe die rechts-Taste):
Außerdem müssen Sie deaktivieren Sie das flag und den cursor wiederherzustellen, sobald die Taste losgelassen wird:
Tatsächlich verwalten die ziehen, müssen Sie das überschreiben der mouse-move-Ereignis. QGraphicsView erbt ein QAbstractScrollArea, und die scrollbars sind leicht zugänglich. Außerdem müssen Sie aktualisieren Sie die pan-position:
neuviemeporte Lösung benötigt, um eine Unterklasse ein QGraphicsView.
Anderen arbeiten ziehen Sie Umsetzung erhalten werden können, ohne die Unterklassen der Ansicht mithilfe der eventFilter. Wenn Sie sich nicht anpassen müssen andere Verhaltensweisen der QGraphicsView, diese Technik sparen Sie einige Arbeit.
Sagen wir mal dein GUI-Logik wird verwaltet von einer QMainWindow Unterklasse und die QGraphicsView & QGraphicsScene sind deklariert als private Mitglieder dieser Unterklasse. Sie würde zur Umsetzung der eventFilter-Funktion wie folgt:
So filtern Sie Ereignisse aus der QGraphicsScene, müssen Sie installieren MyMainWindow als eventFilter der Szene. Vielleicht könnten Sie tun dies in der gleichen Funktion, wo Sie Ihre setup-GUI.
Können Sie erweitern diese Idee ersetzen Sie den cursor mit drag "hand", wie zuvor gezeigt.