Seite 1 von 1
[gelöst] keyPressEvent und ausländische Tastaturlayouts
Verfasst: 5. Oktober 2005 21:47
von pumbah
Hi,
ich bin auf ein Problem gestoßen, und wollte einmal schauen, ob da jemand einen Ausweg kennt.
QKeyEvent liefert bei ausländischen Tastaturlayouts für key() eine 65535 und für ascii fast regelmäßig 0 zurück.
text allerdings liefert das richtige Zeichen. Wie komme ich jetzt an den richtigen Key-Code?
Vielleicht weiss von Euch ja jemand eine Lösung!?
cu,
pumbah
Re: keyPressEvent und ausländische Tastaturlayouts
Verfasst: 6. Oktober 2005 08:01
von macman
pumbah hat geschrieben:QKeyEvent liefert bei ausländischen Tastaturlayouts für key() eine 65535 und für ascii fast regelmäßig 0 zurück.
Was verstehst Du unter ausländischen Tastaturlayout? Mit deutsch funktioniert es? Dann müßten die Jungs bei Trolltech ja deutsche Layouts nutzen, damit es denen nicht auffällt

Ohne Code läßt sich da nichts zu sagen, aber ich vermute das Problem woanders.
Verfasst: 6. Oktober 2005 21:05
von pumbah
macman hat geschrieben:pumbah hat geschrieben:QKeyEvent liefert bei ausländischen Tastaturlayouts für key() eine 65535 und für ascii fast regelmäßig 0 zurück.
Was verstehst Du unter ausländischen Tastaturlayout? Mit deutsch funktioniert es?
Unter KDE Kontrollzentrum->Regionaleinstellungen->Tastaturlayout kann man ein Tastaturlayout einstellen. Z.B. Russische, hebräische, arabische Tastaturlayouts haben ja ganz eigene Zeichen. Anschliessend hat man unten in der Leiste ein kleines Symbol mit Flagge des aktuellen Tastaturlayouts.
Mit deutschem Tastaturlayout kann ich sowohl key() als auch ansii Werte prüfen. und bekomme je einen Wert für press und release der entsprechenden Taste bzw. zB. Qt::Key_A etc. Sobald ich aber auf arabsich umschalte, erhalte ich zwar in einem Textfeld das entsprechende arabische Zeichen (Unicode). Die erwähnten Funktionen liefern aber keine Werte ausser 0 bzw. 65535.
Dann müßten die Jungs bei Trolltech ja deutsche Layouts nutzen, damit es denen nicht auffällt

Recht haste, schweigen musste doch!

Es ist wirklich so!
Ohne Code läßt sich da nichts zu sagen, aber ich vermute das Problem woanders.
Wo vermutest Du es denn nicht?
void MyWidget::keyPressEvent ( QKeyEvent * e ) {
cout << e->key() << endl;
cout << e->ascii() << endl;
switch (e->key() ) {
case Qt::Key_A:
cout << "pumbah is wrong" << endl;
break;
default:
cout << "pumbah is right but it doesn't really help him" << endl;
// at least if you pressed the 'a' key und are using a foreign keyboard layout
}
}
cu,
pumbah
Verfasst: 7. Oktober 2005 08:11
von macman
pumbah hat geschrieben:Mit deutschem Tastaturlayout kann ich sowohl key() als auch ansii Werte prüfen. und bekomme je einen Wert für press und release der entsprechenden Taste bzw. zB. Qt::Key_A etc. Sobald ich aber auf arabsich umschalte, erhalte ich zwar in einem Textfeld das entsprechende arabische Zeichen (Unicode). Die erwähnten Funktionen liefern aber keine Werte ausser 0 bzw. 65535.
Jep, und das ist auch richtig so. Wie in der Doku steht:
Qt Docs hat geschrieben:See Qt::Key for the list of keyboard codes. These codes are independent of the underlying window system.
A value of either 0 or Qt::Key_unknown means that the event is not the result of a known key; for example, it may be the result of a compose sequence, a keyboard macro, or due to key event compression.
Die Liste ist zwar recht umfangreich, enthält aber lange nicht alle Zeichen. Also werden viele Unicodezeichen unbekannt sein und man bekommt eine 0 zurück.
Allerdings muß ich sagen das ich unter einem KeyCode etwas anderes verstehe. Ich hätte erwartet das der Code der Nummer einer Taste entspricht, unabhängig davon welches Tastaturlayout anliegt. Ein 'a' ist 65, egal ob mit Shift oder ohne. Wenn ich dann auf arabisch umschalte, würde ich immer noch die 65 erwarten, bekomme jedoch die 0.
So läßt sich das Ganze wohl nur für die Sondertasten, Entf., Backspace, usw. nutzen, wofür es primär wohl auch gedacht ist. Und bevor ich es vergesse, "pumbah is right but it doesn't really help him"

Verfasst: 7. Oktober 2005 18:43
von pumbah
Qt Docs hat geschrieben:See Qt::Key for the list of keyboard codes. These codes are independent of the underlying window system.
A value of either 0 or Qt::Key_unknown means that the event is not the result of a known key; for example, it may be the result of a compose sequence, a keyboard macro, or due to key event compression.
Da haben wir es.
Allerdings muß ich sagen das ich unter einem KeyCode etwas anderes verstehe. Ich hätte erwartet das der Code der Nummer einer Taste entspricht, unabhängig davon welches Tastaturlayout anliegt. Ein 'a' ist 65, egal ob mit Shift oder ohne. Wenn ich dann auf arabisch umschalte, würde ich immer noch die 65 erwarten, bekomme jedoch die 0.
Genau so habe ich mir das auch gedacht.
Ich bin da auf etwas ganz verwegenes gestossen:
QApplication::x11EventFilter ( XEvent * )
QApplication::x11ProcessEvent ( XEvent * event )
Aber irgendwie ist mir das (noch) unheimlich
cu,
pumbah
P.S. Schön, daß wir mal drüber sprechen konnten.
Verfasst: 10. Oktober 2005 20:18
von pumbah