[gelöst] keyPressEvent und ausländische Tastaturlayouts

Alles rund um die Programmierung mit Qt
Antworten
pumbah
Beiträge: 31
Registriert: 19. August 2005 21:13

[gelöst] keyPressEvent und ausländische Tastaturlayouts

Beitrag 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
Zuletzt geändert von pumbah am 10. Oktober 2005 20:17, insgesamt 1-mal geändert.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: keyPressEvent und ausländische Tastaturlayouts

Beitrag 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 :D Ohne Code läßt sich da nichts zu sagen, aber ich vermute das Problem woanders.
pumbah
Beiträge: 31
Registriert: 19. August 2005 21:13

Beitrag 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 :D
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
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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" :)
pumbah
Beiträge: 31
Registriert: 19. August 2005 21:13

Beitrag 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. :x
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.
pumbah
Beiträge: 31
Registriert: 19. August 2005 21:13

Beitrag von pumbah »

Antworten