2010-11-22 27 views
1

J'ai créé un formulaire dans Qt Creator et ajouté trois QWidgets personnalisés (tous sont la même classe appelée Renderer) dans le formulaire. Je veux que tous les trois widgets à côté du formulaire soient notifiés lorsqu'un utilisateur appuie sur la touche Alt, mais je ne peux même pas en obtenir un pour le moment.Qt 4.6 et OpenGL: comment capturer des presses au clavier avec trois widgets différents à la fois?

J'ai ajouté le void keyPressEvent (QKeyEvent *) et void keyReleaseEvent (QKeyEvent *) dans la classe Renderer, mais les fonctions ne sont pas appelées du tout ... (les points d'arrêt n'ont pas été déclenchés).

void Renderer::keyPressEvent(QKeyEvent *event) { 
    switch(event->key()) { 
    case Qt::Key_Alt: { 
     isAltPressed = true; 
     cout << "alt got pressed" << endl; 
     break; 
    } 
    default: 
     break; 
    } 
} 

void Renderer::keyReleaseEvent(QKeyEvent *event) { 
    switch(event->key()) { 
    case Qt::Key_Alt: { 
     isAltPressed = false; 
     cout << "alt released" << endl; 
     break; 
    } 
    default: 
     break; 
    } 
} 

Est-ce qu'il me manque quelque chose ici?

De plus, y a-t-il quelque chose de spécial à faire pour que les presses clavier soient enregistrées par les trois widgets en même temps?

Merci beaucoup.

+0

Répondu. Pour la deuxième partie de la question, j'ai corrigé le problème en faisant d'isAltPressed une variable de classe au lieu d'une variable membre privée. – confusedKid

Répondre

3

Quelle est votre focusPolicy? Les événements de clavier vont uniquement au widget avec focus (vous pouvez ensuite appeler les autres gestionnaires vous-même).

+0

Je n'ai jamais travaillé avec focusPolicy auparavant, et honnêtement je n'en ai même pas entendu parler (pour Qt) jusqu'à présent ... pouvez-vous me donner un lien pour en savoir plus à ce sujet? – confusedKid

+0

Lien ajouté. J'ai très peu d'expérience avec Qt moi-même, mais cette règle sur les événements keypress qui vont à la fenêtre avec focus est à peu près universelle. Quand j'ai vu que la politique par défaut est "pas de focus", j'ai pensé qu'il valait la peine de vous suggérer de revérifier. –

+0

Le lien ne semble plus fonctionner – someuser