2009-05-29 16 views
3

In meiner Anwendung habe ich QGraphicsScene mit Pixmap hinzugefügt und alles wird in QGraphicsView mit Bildlaufleisten aus angezeigt. Das Programmfenster ist kleiner als Pixmap und wenn ich die Pfeiltasten drücke oder das Mausrad drücke, wird die Pixmap verschoben.QGraphicsView - wie man Maus und Tastatur scrollen

Wie deaktiviere ich das, so dass selbst wenn die Pixmap größer als ein Fenster ist, wird es nicht per Tastatur oder Maus bewegt, wenn ich meine Ereignisse dafür nicht verwende?

(Ich habe versucht, interaktive Eigenschaft auf false gesetzt, aber das hat nicht funktioniert)

Antwort

6

Ich glaube, die einfachste Lösung wäre, FocusPolicy von QGraphicsView auf NoFocus zu setzen und dann alle wichtigen Ereignisse im Hauptfenster zu verarbeiten.

0

Ich weiß nicht, ob es ein einfacher Weg ist, aber die mäßig einfache Möglichkeit wäre, eine Klasse zu machen, die Ihren QGraphicsView erbt Klasse und überschreibt die Maus- und Tastendruckereignisse.

Der härtere Weg würde die Installation eines Ereignisfilters auf dem Widget beinhalten.

Meiner Meinung nach wäre die härteste Brute-Force-Lösung, die Veränderung durch irgendeine Art von Signal zu erkennen, und es zurück zu setzen, wie es war.

3

Ich denke, die einfache Möglichkeit, QGraphicsView::setSceneRect() zu verwenden ist, den Bereich zu setzen, dass die Ansicht zu visualisieren erlaubt ist.

Wenn Sie die sceneRect() der Ansicht auf die tatsächliche Größe des Ansichts-Widgets (oder nur etwas kleiner) einstellen, ist es nicht möglich, außerhalb dieses Rechtecks ​​zu scrollen oder zu schwenken.

Verwandte Themen