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

Qt Discussion :

mousePressEvent pas pris en compte, mais mouseReleaseEvent si !


Sujet :

Qt

  1. #1
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut mousePressEvent pas pris en compte, mais mouseReleaseEvent si !
    Salut,

    J'ai créé une sorte de lecteur d'images qui m'arrivent au fur et à mesure. En somme, une sorte de lecteur vidéo.

    J'ai surchargé mousePressEvent, mouseMoveEvent et mouseReleaseEvent pour que je puisse dessiner des rectangles sur mon image. A terme, ça servira à annoter la vidéo.

    Bref, donc le principe :
    mousePressEvent -> je commence le tracé du rectangle, avec la position courante étant le coin supérieur gauche de mon rectangle
    mouseMoveEvent -> je continue le tracé du rectangle, avec la position courante étant le coin inférieur droit de mon rectangle, et la position récupérée par le mousePressEvent étant le coin supérieur gauche
    mouseReleaseEvent -> je termine le tracé du rectangle : j'ai le coin supérieur gauche et le coin inférieur droit définitif, j'enregistre la position définitive et rajoute définitivement ce rectangle là pour qu'il soit affiché en permanence.

    Le hic, c'est que je me retrouve desfois avec un déclenchement de mouseReleaseEvent sans qu'il n'y ait de mousePressEvent avant. Ca fait que des données que je tente de récupérer dans le mouseReleaseEvent ne sont pas valides (il y a un pointeur très important dans le lot, par exemple), car pas initialisée lors d'un mousePressEvent, et je suis coincé. Pour ne plus que ça plante, je controle la validité des données avant de lancer tout mon tintouin du mouseReleaseEvent, mais toujours est-il que desfois, quand je clique, ça n'appelle pas mousePressEvent mais ça appelle mouseReleaseEvent, et sans raison particulière.

    Une idée pour résoudre ce soucis ? Peut-être mettre un sleep(1 milliseconde) quelque part pour donner un peu d'air à la boucle de traitement d'évènements ?


  2. #2
    Membre actif Avatar de gassi64
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 255
    Points : 230
    Points
    230
    Par défaut
    Pourquoi, au lieu de gérer le tracé par un Press, Move et Release, tu ne le gérerais pas par un premier release au point X1,Y1, et un autre release sur le point X2,Y2, ce qui te donnera tes deux points du rectangle directement sans passer par le press et move ?

    le deuxième release vérifiera qu'il n'y a pas eu un premier release...

  3. #3
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    Plutôt un processEvents qu'un sleep non?

    Ton défilement d'image est continu? Ton "écouteur" sur les mouse events sont-elles les images? Dans ce cas, le bug ne serait-il pas lié au défilement des ces écouteurs?

    C'est très étrange que release soit appelé sans son press au préalable :s

    gassi64> je suppose que c'est pour avoir le tracé du rectangle en visuel, comme sur les OS classiques.
    Un clavier Azerty en vaut deux.

  4. #4
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Citation Envoyé par gassi64 Voir le message
    Pourquoi, au lieu de gérer le tracé par un Press, Move et Release, tu ne le gérerais pas par un premier release au point X1,Y1, et un autre release sur le point X2,Y2, ce qui te donnera tes deux points du rectangle directement sans passer par le press et move ?

    le deuxième release vérifiera qu'il n'y a pas eu un premier release...
    Parce que les gens qui s'en serviront derrière n'ont pas l'habitude de ça et le veulent comme je l'ai expliqué

    Citation Envoyé par Ryo2468 Voir le message
    Plutôt un processEvents qu'un sleep non?
    Intéressant, j'avais oublié processEvents.... Je vais essayer

    Citation Envoyé par Ryo2468 Voir le message
    Ton défilement d'image est continu? Ton "écouteur" sur les mouse events sont-elles les images? Dans ce cas, le bug ne serait-il pas lié au défilement des ces écouteurs?
    Je reçois les images en continu et les affiche en temps réel (par rapport à la réception). Celui qui écoute les mouseEvents est un widget perso qui englobe un player, avec des signaux et slots persos.

    Citation Envoyé par Ryo2468 Voir le message
    C'est très étrange que release soit appelé sans son press au préalable :s
    Je ne te le fais pas dire ...

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    If you create new widgets in the mousePressEvent() the mouseReleaseEvent() may not end up where you expect, depending on the underlying window system (or X11 window manager), the widgets' location and maybe more.
    Je ne sais pas comment tu crées ton rectangle, mais l'erreur de viendrait pas de là ?

    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  6. #6
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Citation Envoyé par Gulish Voir le message
    Je ne sais pas comment tu crées ton rectangle, mais l'erreur de viendrait pas de là ?

    G.
    Je crée mon rectangle (qui n'est pas un widget) pendant le mousePress, je le modifie pendant le mouseMove, et je crée le rectangle définitif pendant le mouseRelease. A la toute fin du mouseRelease, j'insère ce rectangle dans une liste de trucs à afficher par dessus mon image, de sorte que ça ne sera affiché qu'au prochain appelle à paintEvent.

    Tricky, hein ?

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    tu utilise qu'elle widget pour l'affichage?

  8. #8
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Un widget de VigraQt.

    Finalement, j'ai résolu le soucis à force de concevoir le truc différemment.

    Encore mieux, j'ai écrit mon propre widget pour gérer tout ça, from scratch, avec le painter qui dessine l'image puis les choses que j'ai dessinées par dessus.

    Ca marche au poil

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Je ne comprends pas trop ton explication sur la solution. Même si tu as modifié ta façon de peindre les widgets, tu utilises toujours les mouse events non ? Et il me semblait que le problème venait de là à la base.

    Tous les events sont bien transmis maintenant que tu as redefinis ton painter ? Je ne fais pas le lien.

    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  10. #10
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Si tu veux, j'essayais de peindre une image plus des trucs dessus, le tout étant contenu dans un widget plus grand, etc.
    Bref, visiblement l'appli ne savait plus trop quoi faire quand je cliquais sur l'image, car le widget parent interceptait des évènements apparemment. (oui oui, c'est le bordel, mais j'ai réagencé tout ça depuis)

    Dans tous les cas, j'ai dédié un widget juste à ma zone image, qui elle surcharge les mouse*Event's et ça roule comme sur des roulettes

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 28/01/2010, 12h01
  2. getline(cin,s) pas pris en compte ?
    Par FinalSpirit dans le forum SL & STL
    Réponses: 3
    Dernier message: 19/01/2006, 01h18
  3. [Mail] Les sauts de lignes pas pris en compte
    Par Anduriel dans le forum Langage
    Réponses: 15
    Dernier message: 14/12/2005, 19h13
  4. [Plugi][phpeclipse] point d'arrêt pas pris en compte
    Par damjal dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 22/11/2005, 23h58
  5. Mon script cron n'est pas pris en compte
    Par tomnie dans le forum Linux
    Réponses: 11
    Dernier message: 31/03/2004, 11h19

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