[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 -
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
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
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
-
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. -
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. -
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.