Je souhaite implémenter une fonction de défilement/panoramique sur un QGraphicsView dans mon application (Py) Qt. Il est censé fonctionner comme ceci: L'utilisateur appuie sur le bouton central de la souris, et la vue défile lorsque l'utilisateur déplace la souris (c'est une caractéristique assez courante).
J'ai essayé d'utiliser la méthode scroll() héritée de QWidget. Cependant, cela déplace la vue à la place - scrollbars et tout. Voir l'image. Donc, étant donné que ce n'est pas ce que je suis censé faire, comment le ferais-je? Ou est-ce la bonne façon, mais je fais quelque chose d'autre? Le code que j'utilise:Défilement de QGraphicsView par programmation
def __init__(self):
...
self.ui.imageArea.mousePressEvent=self.evImagePress
self.ui.imageArea.mouseMoveEvent=self.evMouseMove
self.scrollOnMove=False
self.scrollOrigin=[]
...
def evImagePress(self, event):
if event.button() == Qt.LeftButton:
self.evImageLeftClick(event)
if event.button() == Qt.MidButton:
self.scrollOnMove=not self.scrollOnMove
if self.scrollOnMove:
self.scrollOrigin=[event.x(), event.y()]
...
def evMouseMove(self, event):
if self.scrollOnMove:
self.ui.imageArea.scroll(event.x()-self.scrollOrigin[0],
event.y()-self.scrollOrigin[1])
Cela fonctionne comme prévu, à l'exception de l'ensemble de l'entreprise move-the-widget.
Fails to scroll http://img55.imageshack.us/img55/3222/scrollfail.jpg
Quel type widget est self.ui.imageArea? Est-ce un QScrollArea, QGraphicsArea ou autre chose? –
Oh, ne l'ai pas mentionné dans le texte, mais dans le titre. C'est un QGraphicsView. – carlpett
QScrollArea se trouve-t-il dans QGraphicsScene que la vue affiche? –