[Qt] Interaction clavier souris.

Résolu
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   -  
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. loupius
     
    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.
    2
  2. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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.
    0
  3. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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.
    0