Question

Dans ma demande je QGraphicsScene avec pixmap ajouté et tout est vu en QGraphicsView avec des barres de défilement au large. La fenêtre du programme est plus petit, puis pixmap et quand j'appuyez sur les touches fléchées ou déplacer molette de la souris pixmap est déplacé.

Comment puis-je désactiver que même si le pixmap est plus grande que la fenêtre ne sera pas déplacé par le clavier ou la souris à moins d'utiliser mes événements pour cela?

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

Était-ce utile?

La solution

Je crois que la solution la plus simple serait de mettre focusPolicy de QGraphicsView à NoFocus et ensuite traiter tous les événements clés dans la fenêtre principale.

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

Autres conseils

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

Si vous définissez la sceneRect() de vue de la taille réelle du widget de vue (ou légèrement plus petit), alors il ne sera pas en mesure de défilement horizontal ou vertical à l'extérieur de ce rectangle.

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 classe QGraphicsView, et remplace la souris et les événements de presse clés.

La façon plus difficile impliquerait l'installation d'un filtre d'événement sur le widget.

À mon avis, le plus dur solution force brute serait de détecter le changement par une sorte de signal et le mettre à la façon dont il était.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top