2009-05-29 6 views
3

Dans mon application, QGraphicsScene avec pixmap est ajouté et tout est visualisé dans QGraphicsView avec les barres de défilement désactivées. La fenêtre du programme est plus petite que le pixmap et lorsque j'appuie sur les touches fléchées ou déplace la molette de la souris, le pixmap est déplacé.QGraphicsView - comment désactiver le défilement de la souris et du clavier

Comment est-ce que je peux désactiver cela même si le pixmap est plus grand que la fenêtre il ne sera pas déplacé par le clavier ou la souris à moins que j'utilise mes événements pour cela?

(j'ai essayé de définir la propriété interactive faux, mais cela ne fonctionne pas)

Répondre

6

Je crois que la solution la plus simple serait de définir FocusPolicy de QGraphicsView à NoFocus, puis traiter tous les événements clés dans la fenêtre principale.

0

Je ne sais pas s'il y a un moyen plus facile, mais la façon modérément facile serait de faire une classe qui hérite votre QGraphicsView class, et remplace les événements de la souris et de la touche. La méthode la plus difficile impliquerait l'installation d'un filtre d'événement sur le widget. À mon avis, la solution de force brute la plus dure serait de détecter le changement à l'aide d'une sorte de signal, et de le rétablir comme il était.

3

Je pense que le plus simple est d'utiliser QGraphicsView::setSceneRect() pour définir la zone que la vue est autorisé à visualiser.

Si vous réglez la taille de la fenêtre sceneRect() sur la taille réelle du widget de visualisation (ou légèrement plus petite), elle ne pourra pas défiler ou se déplacer en dehors de ce rectangle.

Questions connexes