[Qt] Interaction clavier souris.

Résolu/Fermé
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 20 avril 2009 à 08:35
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 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.
A voir également:

3 réponses

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
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
20 avril 2009 à 12:34
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
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
20 avril 2009 à 15:57
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