[C++] [Qt] Mouse Event
Forum Programmation : [C++] [Qt] Mouse Event
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
Et avec grabMouse() ?
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
ça marche pas
Code :
|
j'ai pas compris ce qu'est censé faire grabMouse()
Message édité par tonydou le 05-05-2009 à 21:54:27
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.
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
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.
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
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
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
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.
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Il y a 1865 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

CRicky