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
[gelöst] keyPressEvent und ausländische Tastaturlayouts
[gelöst] keyPressEvent und ausländische Tastaturlayouts
Zuletzt geändert von pumbah am 10. Oktober 2005 20:17, insgesamt 1-mal geändert.
Re: keyPressEvent und ausländische Tastaturlayouts
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älltpumbah hat geschrieben:QKeyEvent liefert bei ausländischen Tastaturlayouts für key() eine 65535 und für ascii fast regelmäßig 0 zurück.
Wo vermutest Du es denn nicht?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.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.Was verstehst Du unter ausländischen Tastaturlayout? Mit deutsch funktioniert es?
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.
Recht haste, schweigen musste doch!Dann müßten die Jungs bei Trolltech ja deutsche Layouts nutzen, damit es denen nicht auffälltEs ist wirklich so!
Ohne Code läßt sich da nichts zu sagen, aber ich vermute das Problem woanders.
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
Jep, und das ist auch richtig so. Wie in der Doku steht: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.
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.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.
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"
Da haben wir es.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.
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.