Frage

In meiner Anwendung habe ich QGraphicsScene mit hinzugefügter Pixmap und alles wird in QGraphicsView mit deaktivierten Bildlaufleisten angezeigt.Das Programmfenster ist kleiner als Pixmap und wenn ich die Pfeiltasten drücke oder das Mausrad bewege, wird die Pixmap verschoben.

Wie kann ich das deaktivieren, damit die Pixmap, selbst wenn sie größer als das Fenster ist, nicht per Tastatur oder Maus verschoben wird, es sei denn, ich verwende dafür meine Ereignisse?

(Ich habe versucht, die interaktive Eigenschaft auf „false“ zu setzen, aber das hat nicht funktioniert)

War es hilfreich?

Lösung

Ich glaube, dass die einfachste Lösung FocusPolicy von QGraphicsView zu NoFocus und dann verarbeiten alle wichtigen Ereignisse im Hauptfenster zu setzen sei.

ui->graphicsView->setFocusPolicy( Qt::NoFocus );

Andere Tipps

Ich denke, der einfache Weg ist die Verwendung QGraphicsView::setSceneRect() um den Bereich festzulegen, den die Ansicht visualisieren darf.

Wenn Sie die Ansicht festlegen sceneRect() auf die tatsächliche Größe des Ansichts-Widgets (oder nur geringfügig kleiner) anpassen, ist ein Scrollen oder Schwenken außerhalb dieses Rechtecks ​​nicht möglich.

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

Die härtere Art und Weise würde bedeuten, einen Ereignisfilter auf dem Widget zu installieren.

Meiner Meinung nach ist die härteste Brute-Force-Lösung wäre, die Änderung durch eine Art von Signal zu erfassen, und setzen Sie ihn zurück, wie es war.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top