IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

[Qt 4.4.3]tags : keyPressEvent - keyReleaseEvent - empêcher répétition touche clavier


Sujet :

Qt

  1. #1
    Membre averti Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Points : 344
    Points
    344
    Par défaut [Qt 4.4.3]tags : keyPressEvent - keyReleaseEvent - empêcher répétition touche clavier
    Bonjour,

    j'ai un petit souci avec mon programme.
    J'ai une télécommande virtuelle (des boutons tout simplement) que l'on peut cliquer pour piloter une machine (avance, gauche, droite, recul ...).

    Il faudrait aussi que je puisse piloter avec les touches fléchées du clavier.

    Pour cela, j'ai surchargé keyPressEvent et keyReleaseEvent.
    ça fonctionne correctement. Mais en écoutant la machine je me suis rendu compte qu'au premier appui sur une flèche, l'action est éxécutée, ensuite, la machine s'arrete, repart, s'arrete très rapidement.

    Est-ce que c'est dû à la répétition de touche ? (ce qui en a tout l'air : première action correcte 2 ou 3 secondes, puis répétition très rapide ensuite).

    Si oui, comment empêcher la répétition des touches du clavier sur des touches spécifiques (si ça existe) ?

    On pourrait se dire qu'il suffit que je lance un timer sur le keyPressEvent et je vérifie le délai ensuite sur le keyReleaseEvent, sauf qu'on peut appuyer 1/2 secondes tout comme 10 secondes (les moteurs doivent démarrer à l'appui et s'arrêter au relâchement).

    Une solution ?
    Lorsque vous avez trouvé solution à votre problème, n'oubliez pas de cliquer en bas de la page
    Besoin d'un photographe de mariage : http://www.triangle-photo.fr

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 248
    Points : 119
    Points
    119
    Par défaut
    Salut MacProp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    void taClasse::keyPressEvent(QKeyEvent *event)
    {
       if(event->isAutoRepeat())
         {
            event->ignore();
         }
     
        else
          {
            //tu pars ton moteur
            event->accept();
          }
     
    }
    J'imagine que lorsque tu fais ignore() sur le keyPressEvent(), celui ci ne transmet aucun signal et donc le KeyReleaseEvent() ne s'exécutera que:
    - soit juste après le premier keyPressEvent(ce qui ne t'aiderai pas)
    - soit au dernier (ce qui serai l'idéal pour toi)

    Il est possible que du dois vérifier le autoRepeat dans le releaseEvent aussi. Essais et tiens nous au courant

  3. #3
    Membre averti Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Points : 344
    Points
    344
    Par défaut
    Salut, merci beaucoup de ton aide, j'ai solutionné (je vais quand même aller vérifier parce que la machine est dans un autre bureau et en fait je pilote un serveur) de la manière suivante :

    (dans keyPressEvent ET keyReleaseEvent)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(event->isAutoRepeat())
    {
         return;
    }
    J'ai pas géré le accept() ou ignore car dans la documentation de keyPressEvent c'est écrit :

    Note that QKeyEvent starts with isAccepted() == true, so you do not need to call QKeyEvent::accept() - just do not call the base class implementation if you act upon the key.
    Lorsque vous avez trouvé solution à votre problème, n'oubliez pas de cliquer en bas de la page
    Besoin d'un photographe de mariage : http://www.triangle-photo.fr

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 248
    Points : 119
    Points
    119
    Par défaut
    d'accord ..encore mieux !

    J'imagine que le release ne se lancera qu'à la fin puisque c'est le auto repeat du press qui causais les auto release ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CKEditor] Empêcher la suppression d'un tag
    Par tintin72 dans le forum Bibliothèques & Frameworks
    Réponses: 0
    Dernier message: 20/03/2010, 10h48
  2. Réponses: 5
    Dernier message: 06/03/2010, 13h23
  3. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo