Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt] Petit problème avec event->key()

    20 novembre 2012 à 19:57:09

    Bonsoir,

    J'ai un petit problème tout simple avec la gestion du clavier mais je n'arrive pas à le régler. J'espère que vous pourrez m'aider.

    Alors voilà, j'ai une petite application qui au moyen d'un QSettings permet à l'utilisateur de configurer les touches qu'il veut. Cela marche très bien pour les touches classiques comme "A", "B", ... Mais j'ai un petit problème avec "ALt Gr".

    En effet celle-ci est en réalité une combinaison de touche : "Ctrl" et "Alt".
    Du coup lorsque je veux configurer l'un de mes contrôles par "Alt Gr", mon programme me dit que c'est "Ctrl" qui a été appuyé. J'ai du coup voulu transformer mon programme afin qu'il utilise "keyReleaseEvent" plutôt que "keyPressEvent" mais c'est pareil car mon programme perçoit que "Ctrl" et "Alt" ont été relâchés...

    Donc voilà je suis à la recherche d'un moyen d'identifier à coup sûr quelle touche a été enfoncée par l'utilisateur. Si quelqu'un a une solution, je lui serais gré de la partager avec moi :)

    Merci d'avance,
    Malloc.
    • Partager sur Facebook
    • Partager sur Twitter
      22 novembre 2012 à 14:22:46

      Tu peux utiliser QKeyEvent::nativeModifiers() qui contient une combinaison des ces valeurs:
      enum WindowsNativeModifiers {
          ShiftLeft            = 0x00000001,
          ControlLeft          = 0x00000002,
          AltLeft              = 0x00000004,
          MetaLeft             = 0x00000008,
          ShiftRight           = 0x00000010,
          ControlRight         = 0x00000020, 
          AltRight             = 0x00000040,
          MetaRight            = 0x00000080,
          CapsLock             = 0x00000100,
          NumLock              = 0x00000200,
          ScrollLock           = 0x00000400,
          ExtendedKey          = 0x01000000,
      
          // Convenience mappings
          ShiftAny             = 0x00000011,
          ControlAny           = 0x00000022,
          AltAny               = 0x00000044,
          MetaAny              = 0x00000088,
          LockAny              = 0x00000700
      };
      

      Donc pour AltGr tu obtiens 0x01000042 au moment de l'appui, et 0x42 quand tu appuies en même temps sur une autre touche. Je n'ai pas regardé pour keyReleaseEvent.

      Comme l'enum est déclaré dans src/gui/kernel/qkeymapper_p.h, il n'est pas public, il faut donc bêtement le copier dans ton code pour l'utiliser. De plus si tu écris une application portable, il faudra certainement mettre le code qui l'utilise dans un bloc #ifdef Q_OS_WIN puisque ça n'est valable que pour windows.
      • Partager sur Facebook
      • Partager sur Twitter
        24 novembre 2012 à 12:59:02

        Merci pour ta réponse, je teste ça dès que je peux !
        • Partager sur Facebook
        • Partager sur Twitter

        [Qt] Petit problème avec event->key()

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown