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 :

Utilisation de keyPressEvent ?


Sujet :

Qt

  1. #1
    Membre habitué
    Homme Profil pro
    Doctorant en Astrophysique
    Inscrit en
    Mars 2009
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Astrophysique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2009
    Messages : 312
    Points : 176
    Points
    176
    Par défaut Utilisation de keyPressEvent ?
    Bonjour à tous.

    Je suis en train de bidouiller un widget openGL et j'aimerai pouvoir utiliser les touches directionnelles pour naviguer en 3D. La surcharge de "wheelEvent" ne m'a pas posé de problème, mais là, avec le clavier je n'y arrives pas.

    Voilà à quoi cela ressemble :
    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
    16
    17
    18
    19
    20
    21
    22
    void Viewer3D::keyPressEvent(QKeyEvent *event)
    {
        switch(event->key())
        {
            case Qt::Key_Left:
                _cam.posAdd(_cam.left());
                break;
     
            case Qt::Key_Right:
                _cam.posAdd(_cam.right());
                break;
     
            case Qt::Key_Down:
                _cam.posAdd(_cam.down());
                break;
     
            case Qt::Key_Up:
                _cam.posAdd(_cam.up());
                break;
        }
        updateGL();
    }
    (_cam est une classe perso représentant la camera, posAdd() permet d'incrémenter le QVector3D matérialisant la position de la caméra et les left(),right(),down(),up() sont des vecteurs unitaires pointant dans les directions associées).

    Quelle est l'origine du problème et comment le solutionner ?
    Merci beaucoup

  2. #2
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Points : 8 140
    Points
    8 140
    Par défaut
    Ton code parait correct après une rapide lecture !

    Est ce que tu as debuggé pour voir si tu aller dans cette fonction ?

    Est ce que le widget dans lequel tu as réimplémenté cette fonction à bien le focus du clavier ? Est ce que ce ne serait pas un viewport qui a le focus (tu pourrais à ce moment là utiliser un eventFilter sur le viewport) ?

    C'est juste des idées de réflexion.

  3. #3
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 617
    Points
    15 617
    Par défaut
    Pas vu non plus d'erreur dans le code. En général, dans ce genre de problème, cela vient de la 3D (erreur de calcul de la position ou pas de update de l'affichage). Tu as testé tes fonctions de _cam (par exemple avec la souris) ?

    A relire (ou à lire) peut être : tutoriel

  4. #4
    Membre habitué
    Homme Profil pro
    Doctorant en Astrophysique
    Inscrit en
    Mars 2009
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Astrophysique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2009
    Messages : 312
    Points : 176
    Points
    176
    Par défaut
    Ouaip les fonctions de _cam ont été testées avec la souris. N'y aurait-il pas un booléen à passer à true ou un truc à initialiser avant d'utiliser keyPressEvent() ? Sinon je vais voir avec eventFilter...

  5. #5
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Points : 8 140
    Points
    8 140
    Par défaut
    Citation Envoyé par Kaluza Voir le message
    Ouaip les fonctions de _cam ont été testées avec la souris. N'y aurait-il pas un booléen à passer à true ou un truc à initialiser avant d'utiliser keyPressEvent() ? Sinon je vais voir avec eventFilter...
    Non, c'est une fonction qui peut être reimplémenté directement, sans avoir à activer quoi que ce soit !

  6. #6
    Membre habitué
    Homme Profil pro
    Doctorant en Astrophysique
    Inscrit en
    Mars 2009
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Astrophysique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2009
    Messages : 312
    Points : 176
    Points
    176
    Par défaut
    Bon alors après avoir pas mal fouillé sur google, il s'avère qu'en rajoutant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setFocusPolicy(Qt::StrongFocus);
    dans le constructeur, ça marche bien.
    Il fallait donc bien "activer" quelque chose. Si quelqu'un pouvait quand même m'expliquer le pourquoi du comment pour que mon widget soit "clean/robuste", ce serait sympa.

    Merci beaucoup

  7. #7
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 617
    Points
    15 617
    Par défaut
    Normalement, il n'est pas nécessaire de modifier le focus policy. Il doit y avoir un conflit avec tes différents widgets sur le focus. Vérifie que tu n'as pas de problème de ce côté (par exemple plusieurs QMainWindow). As tu plusieurs QWidgets aussi ? Peut être un problème de propagation des events.

    si c'est bon ?

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 16h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 15h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 13h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 17h01
  5. Réponses: 2
    Dernier message: 21/03/2002, 00h01

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