Strg-+ in keyPressEvent

Alles rund um die Programmierung mit Qt
Antworten
The_Fallen
Beiträge: 7
Registriert: 16. Juni 2010 15:44

Strg-+ in keyPressEvent

Beitrag von The_Fallen »

Hi,

ich versuch grad, ein Strg-+ im keyPressEvent abzufangen. Hab da aber grad das eigenartige Phänomen, dass ich eine andere Taste geliefert kriege, wenn ich Strg gedrückt halte oder wenn nicht.
Wenn ich einfach nur + auf der Tastatur drücke, krieg ich den Code 43 zurückgeliefert (event->key()), was Qt::Key_Plus entspricht. Sobald ich aber Strg dazu drücke, ist der Code 93, was anscheinend der schließenden Klammer entspricht.
Ich kann natürlich einfach auf Code 93 prüfen, aber irgendwas läuft da ja was falsch. Außerdem weiß ich ja nicht, ob ich nicht bei anderen Tastaturlayouts vielleicht noch andere Werte kriege.
Weiß einer, was der Grund für das Verhalten ist?

Gruss
cyberduck
Beiträge: 16
Registriert: 14. Juli 2010 12:07

Beitrag von cyberduck »

Hi,

vermutlich musst Du noch den Modifier abfragen. Versuche es mal so:

Code: Alles auswählen

if (qApp->keyboardModifiers() == Qt::ALT && event->key() == Qt::Key_Plus)
{
   //...
}
The_Fallen
Beiträge: 7
Registriert: 16. Juni 2010 15:44

Beitrag von The_Fallen »

Naja, genau das mache ich schon. Hier mal das gekürzte Event:

Code: Alles auswählen

void MainWindow::keyPressEvent(QKeyEvent *event)
{
    qDebug() << event->key() << "\t" << event->modifiers();

    if (event->key() == Qt::Key_Plus && event->modifiers() == Qt::ControlModifier) {
        [...]
    }
    else if (event->key() == Qt::Key_Minus && event->modifiers() == Qt::ControlModifier) {
        [...]
    }
}
Der untere Teil mit Strg-Minus funktioniert einwandfrei, der obere mit Strg-Plus nicht. Wenn ich da aber den Teil mit dem modifier rausnehme, geht auch das.
Wenn ich die Plus-Taske OHNE Strg, gibt mir die Debug-Ausgabe in der ersten Zeile:

Code: Alles auswählen

43 	 QFlags() 
Wenn ich Strg drücke, krieg ich:

Code: Alles auswählen

93 	 QFlags(0x4000000) 
Schon irgendwie merkwürdig, oder?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Bist du unter Linux? Hast du irgendwie in deiner xmodmap o.Ä. rumgewerkelt, und eben strg-+ auf ")" gemapped?
The_Fallen
Beiträge: 7
Registriert: 16. Juni 2010 15:44

Beitrag von The_Fallen »

franzf hat geschrieben:Bist du unter Linux? Hast du irgendwie in deiner xmodmap o.Ä. rumgewerkelt, und eben strg-+ auf ")" gemapped?
Nee, ist Windows 7. Aber guter Tipp, hab das Ganze grad mal unter Linux kompiliert. Und siehe da, er gibt mir in beiden Fällen den richtigen Keycode 43 aus.
Nur warum macht Win 7 das anscheinend falsch? Hab grad mal auf englisches Tastaturlayout umgestellt und da funktioniert's. Auch mit der Plus-Taste auf dem Numpad geht's ohne Probleme...
Antworten