Название: keyPressEvent() при русской раскладке Отправлено: alsav22 от Ноябрь 19, 2012, 10:25 Как сделать, чтобы keyPressEvent() обрабатывал нажатие клавиши при русской раскладке? Например, такой код работает при английской раскладке, а при русской - не реагирует на нажатие клавиши Z:
Код: class MyLabel : public QLabel Название: Re: keyPressEvent() при русской раскладке Отправлено: Bepec от Ноябрь 19, 2012, 10:30 Сканкоды вам в помощь.
Или, насколько я помню, необходимо пару бит отбрасывать. (недостоверная информация!) Название: Re: keyPressEvent() при русской раскладке Отправлено: alsav22 от Ноябрь 19, 2012, 10:34 Сканкоды вам в помощь. Ещё бы и как... По идее, тут как раз и должны скан коды использоваться, но почему-то не работает.Название: Re: keyPressEvent() при русской раскладке Отправлено: Bepec от Ноябрь 19, 2012, 10:37 key возвращает клавишу, определённую списком Qt.
А pe->scanCode() вернёт то, что вам надо, ннэ? Название: Re: keyPressEvent() при русской раскладке Отправлено: alsav22 от Ноябрь 20, 2012, 09:04 Цитировать key возвращает клавишу, определённую списком Qt. В том то и дело, что нет. Получается так. Если нажать "Z" при английской раскладке, то key() выдаст код 90(5A) (что соответствует списку Qt), nativeScanCode() - 44(2С). При русской раскладке: key() - 1071(42F), nativeScanCode() - 44(2С). Правильно, в двух раскладках, работает nativeVirtualKey(). Выдаёт 90(5А).Название: Re: keyPressEvent() при русской раскладке Отправлено: Bepec от Ноябрь 20, 2012, 09:30 Не понял вашей реплики.
Вы указываете, что Native scan code у вас одинаков в обоих случаях. Что вам ещё надо? ... nativeScanCode() - 44(2С). ... nativeScanCode() - 44(2С). ... PS если вы хотите получить русскую букву по key() - вынужден вас разочаровать. В списке Qt имеются только английские клавиши. Чтобы выводить русскую или английскую букву, нужно брать 2 таблицы скан кодов (Ru/Eng) и проверять раскладку Api ОС. Название: Re: keyPressEvent() при русской раскладке Отправлено: alsav22 от Ноябрь 20, 2012, 10:03 Цитировать Что вам ещё надо? Хотел, чтобы метод возвращал код, соответствующий списку Qt (значение из перечисления Key), при двух раскладках. Именно, соответствующий списку Qt (поэтому nativeScanCode() не подошёл, хотя можно и его использовать, в этом вы правы). Такой метод мне подсказали на другом форуме: nativeVirtualKey()Название: Re: keyPressEvent() при русской раскладке Отправлено: Bepec от Ноябрь 20, 2012, 10:28 Ну таки и используйте. Флаг вам в руки, nativeScanCode на шею :)
Название: Re: keyPressEvent() при русской раскладке Отправлено: alsav22 от Ноябрь 20, 2012, 11:21 Насчёт nativeScanCode() есть оговорка:
Цитировать Note: On Mac OS/X, this function is not useful, because there is no way to get the scan code from Carbon or Cocoa. The function always returns 1 (or 0 in the case explained above). Насколько я понял, не совсем кроссплатформенный метод. |