[Qt] Interaction clavier souris.

Résolu
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.
--
Salutation ! (il faut bien que vous compreniez que j'ai TOUJOURS raison)
Char Snipeur
Configuration: Windows XP
Firefox 3.0.8

3 réponses

  • Votes
  • Date
  • Date décroissante
  1. 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.
    1. Contributeur
      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.
      1. Contributeur
        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.