Votre question

[C++] [Qt] Mouse Event

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
5 Mai 2009 19:00:10

Bonjour,

J'ai des soucis avec les evenements de la souris sur mon programme.
J'explique:
J'ai une classe MainWindow qui est décomposé en gridLayout.
Dans ma zone centrale, j'ai instancié une classe MarquageArea qui est elle même composé de 2 petites classe zoneImage à l'aide d'un gridLayout.

J'espere que le "schéma explicatif" de mon programme est compréhensible.

Le problème est donc le suivant:
Je cherche à donner un evenement souris à mes zoneImage. Un Clique sur une zoneImage permet d'ouvrir une fenetre.

Dans ma classe zoneImage, j'ai bien redéfini la fonction mousePressEvent mais celà ne fonctionne pas.

Merci d'avance ;) 

Autres pages sur : mouse event

a b L Programmation
5 Mai 2009 21:23:29

Et avec grabMouse() ? :) 
5 Mai 2009 21:51:15

ça marche pas :( 

  1. void zoneImage::mousePressEvent(QMouseEvent *e)
  2. {
  3. grabMouse();
  4. QMessageBox::information(this, tr("A Propos"), tr("blabla"));
  5.  
  6.  
  7. }


j'ai pas compris ce qu'est censé faire grabMouse()
a b L Programmation
5 Mai 2009 21:57:51

En fait c'est dans ta MainWindow que tu fais tonZoneImage->grabMouse(), ça indique que c'est ce widget qui va récupérer tous les évènements souris. Le problème c'est que plus rien d'autre ne prendra la souris.
Si tu gère des évènements dans la fenêtre parent, c'est ce qui te bloque: l'event est géré par le parent et pas renvoyé aux enfants.
5 Mai 2009 22:44:42

Dans ma fenêtre parent, je gère des actions sur des boutons uniquement.
J'ai redéfini mousePressEvent dans ma classe zoneImage
j'ai fait monMarquageArea->maZoneImage->grabMouse() dans mon constructeur de MyMainWindow et cela ne fonctionne pas, ça bug.
a b L Programmation
6 Mai 2009 21:37:58

Si je me souviens bien, il suffit que tu gères un handler (pas forcément de souris) dans une fenêtre pour que celle-ci récupère tous les évènements souris.

J'ai regardé la doc, et j'ai retrouvé ce qu'il fallait faire. Tu gardes ton mousePressEvent dans ZoneImage, mais dans la classe parent, tu dois définir un filtre sur les évènements qu'un widget (ta MainWindow) à renvoyer sur les widgets enfants (tes Zone image).
Pour cela, tu dois faire appel à la méthode installEventFilter() sur tous les widgets enfants susceptibles de récupérer l'évènement, et faire le filtre en surchargeant la méhtode eventFilter() dans ta MainWindow. Donc avec taZoneImage->installEventFilter(taMainWindow), tu va pouvoir rediriger tous les event que tu souhaites.
http://doc.qtsoftware.com/4.5/qobject.html#eventFilter
19 Mai 2009 20:11:32

Pffiou, finalement j'ai changé complètement la structure de mon programme (j'ai tout mis dans la même classe) et j'ai utilisé les event filter et ça marche bien :) 

Par contre, une autre question, jme suis documenté mais j'ai pas réussi à trouver:

J'ai crée des onglets avec QTabWidget et j'aimerai qu'un bouton s'affiche lorsque je change d'onglet. Il faudrait que je redéfinise une fonction je suppose, mais je vois pas laquelle.

Merci
a b L Programmation
19 Mai 2009 20:28:38

Je considère que le bouton n'est pas créé dans les onglet, mais à l'extérieur. Alors, il te faut faire ton propre slot, et faire un connect du signal de changement d'onglet sur ton slot. Dans ton slot tu peux créer un bouton.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS