IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

problème avec DragMode & MouseEvents


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 31
    Par défaut problème avec DragMode & MouseEvents
    Bonjour ,

    en développant une petite application (QMainWindow ) sous QtDesigner , j'ai rencontré un problème à propos du DragMode du QGraphicsView ,

    je l'ai mis par défaut : RubberHandDrag . tout marche bien juqu'ici : quand je clique sur la zone du qGraphicsView je vois bien le rectangle de sélection.

    étant donné que je ne veux pas que les mousePressEvent/mouseReleaseEvent/mouseWheelEvent fonctionnent en dehors du QGraphicsView , je les ai ré-implémenté comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    self.graphicsView.mouseMoveEvent = self.myPressEvent
    self.graphicsView.mouseReleaseEvent = self.myReleaseEvent
    self.graphicsView.wheelEvent = self.mywheelEvent
    Je me suis rendu compte , après des heures de recherches que quand je procède comme ça , le RubberHandDrag ou même le ScrollHandDrag activé sur le QGRaphicsView ne marchent plus !! . Je ne vois pas le rapport entre les deux ? !

    dès que j'enlève ces lignes , ça remarche !

    Le problème c'est que je n'ai pas le choix : si j'implémente directement les méthodes ( def mousePressEvent .. ) sur ma class principale qui hérite QMainWindow, ça marche même quand je clique en dehors du QGraphicsView .. je ne veux pas cela !

    Quelqu'un a une idée pourquoi ce problème ? !

    est ce que je procède avec une mauvaise méthode ?

    Cordialement ,

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Si tu réimplémentes les événements souris alors tu dois y inclure le choix du comportement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        def mousePressEvent(self, event):
            if condition unetelle:
                self.setDragMode(QGraphicsView.RubberBandDrag)
                self.start_pos = self.mapToScene(event.pos())
                QGraphicsView.mousePressEvent(self, event)
     
            elif ...:
                ...

  3. #3
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    En écrivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.graphicsView.mouseMoveEvent = self.myPressEvent
    tu fais que chaque évènement mouseMoveEvent de self.graphicsView sera en fait envoyé dans la méthode myPressEvent qui est une méthode de QMainWindow.

    Ça marche, mais à la fin de myPressEvent, il faut repasser la main au gestionnaire d'évènement mouseMoveEvent de QGraphicsView.

    Quelque chose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QGraphicsView.mouseMoveEvent(self.graphicsView, event)
    Une autre solution qu'il faut utiliser dans les cas plus complexes est de sous-classer QGraphicsView. On peut alors surcharger directement les gestionnaires d'évènements sans avoir besoin de changer leurs adresses.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 31
    Par défaut
    Merci beaucoup pour vos réponses ,

    Effectivement , c'était ça mon erreur : bien que j'ai essayé d'implémenter les commandes ' setDragMode ' dans mes ' myPressEvent ' , je n'ai jamais repassé le contrôle au QGraphicsView.mousePressEvent.

    Merci bien ,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec MouseEvent
    Par stess29 dans le forum Débuter
    Réponses: 11
    Dernier message: 29/10/2010, 14h22
  2. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo