[Qt] Interaction clavier souris. [Résolu/Fermé]

Messages postés
9713
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
13 septembre 2019
- - Dernière réponse : Char Snipeur
Messages postés
9713
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
13 septembre 2019
- 20 avril 2009 à 15:57
Bonjour,
je ne trouve pas comment avoir une intéraction entre la souris et le clavier. C'est à dire que je voudrais avoir un comportement différent selon qu'une touche du clavier et enfoncé ou non. J'ai la fonction suivante, qui ajoute un point à mon dessin lorsque je clic sur ma fenêtre
void Construct::mousePressEvent(QMouseEvent *event)
 {
     lastPos = event->pos();
     if (event->buttons() & Qt::LeftButton) {
         addPoint(event->pos(),0);
     } else if (event->buttons() & Qt::RightButton) {
         addPoint(event->pos(),1);
     }
     repaint();
 }

J'aimerai savoir ce qu'il faut que je rajoute pour fiare une nouvelle action lorsque j'appuie, par exemple sur "control".
Merci.
Afficher la suite 

3 réponses

Meilleure réponse
2
Merci
La solution n'est pas de créer une nouvelle action, mais dans ta fonction:
mousePressEvent(QMouseEvent* event)
d'appeler la fonction statique:
Qt::KeyboardModifiers QApplication::keyboardModifiers()
qui a enregistré l'état du clavier juste avant le clic de la souris.
Tu peux donc ajouter, dans ta fonction, quelque chose du genre:
switch (QApplication::keyboardModifiers())
{
  case Qt::NoModifier:
    qDebug() << "-> NoModifier";
    break;
  case Qt::ShiftModifier:
    qDebug() << "-> ShiftModifier";
    break;
  case Qt::ControlModifier:
    qDebug() << "-> ControlModifier";
    break;
  case Qt::AltModifier:
    qDebug() << "-> AltModifier";
    break;
  case Qt::MetaModifier:
    qDebug() << "-> MetaModifier";
    break;
  case Qt::KeypadModifier:
    qDebug() << "-> KeypadModifier";
    break;
  case Qt::GroupSwitchModifier:
    qDebug() << "-> GroupSwitchModifier";
    break;
}
En remplaçant évidemment la ligne 'qDebug()...'.
Bonne journée.

Dire « Merci » 2

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 70999 internautes nous ont dit merci ce mois-ci

Messages postés
9713
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
13 septembre 2019
1098
0
Merci
Merci, je vais essayé ça.
(quand je parlait d'action, je ne parlais pas d'action QT, maisau sens large)
void Construct::mousePressEvent(QMouseEvent *event)
 {
     lastPos = event->pos();
     if (event->buttons() & Qt::LeftButton && QApplication::keyboardModifiers()==Qt::NoModifier) {
         addPoint(event->pos(),0);
     } else if (event->buttons() & Qt::RightButton && QApplication::keyboardModifiers()==Qt::NoModifier) {
         addPoint(event->pos(),1);
     }else if (event->buttons() & Qt::RightButton && QApplication::keyboardModifiers()==Qt::ControlModifier) {
         delPoint(event->pos(),1);
     }
     repaint();
 }
Merci.
Messages postés
9713
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
13 septembre 2019
1098
0
Merci
C'est bon, ça fonctionne.
J'ai trouvé une autre solution, il faut surchargé les méthodes virtuelles keyPressEvent et keyReleaseEvent afin de configurer une variable de classe.