2010-11-22 4 views
1

Ich erstellte ein Formular in Qt Creator und fügte drei benutzerdefinierte QWidgets (alle sind die gleiche Klasse namens Renderer) in das Formular ein. Ich möchte, dass alle drei Widgets neben dem Formular benachrichtigt werden, wenn ein Benutzer die Alt-Taste drückt, aber ich kann im Moment noch nicht einmal zur Arbeit kommen.Qt 4.6 und OpenGL: wie man Tastaturdrücken mit drei verschiedenen Widgets gleichzeitig erfasst?

Ich habe die void keyPressEvent (QKeyEvent *) und void keyReleaseEvent (QKeyEvent *) in die Renderer-Klasse hinzugefügt, aber die Funktionen werden überhaupt nicht aufgerufen ... (Haltepunkte wurden nicht ausgelöst) Die Tasten drücken Funktionen sind geschützt.

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; 
    } 
} 

Fehle ich hier etwas?

Gibt es auch etwas Besonderes, um Tastatureingaben von allen drei Widgets gleichzeitig registrieren zu lassen?

Vielen Dank.

+0

Beantwortet. Für den zweiten Teil der Frage habe ich das Problem behoben, indem ich isAltPressed eine Klassenvariable anstelle einer privaten Membervariable gemacht habe. – confusedKid

Antwort

3

Was ist Ihre focusPolicy? Tastaturereignisse werden nur mit Fokus auf das Widget übertragen (Sie können dann die anderen Handler selbst aufrufen).

+0

Ich habe noch nie mit focusPolicy gearbeitet und ehrlich gesagt habe ich noch nicht einmal davon gehört (für Qt) ... kannst du mir bitte einen Link geben, um mehr darüber zu erfahren? – confusedKid

+0

Link hinzugefügt. Ich habe sehr wenig Erfahrung mit Qt selbst, aber diese Regel über Tastendruckereignisse, die mit dem Fokus ins Fenster gehen, ist ziemlich universal. Als ich sah, dass die Standardrichtlinie "kein Fokus" ist, dachte ich, dass es sich lohnt, zu empfehlen, dass Sie das überprüfen. –

+0

Link scheint nicht mehr zu funktionieren – someuser