Russian Qt Forum
Ноябрь 24, 2024, 20:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: keyPressEvent() при русской раскладке  (Прочитано 5756 раз)
alsav22
Гость
« : Ноябрь 19, 2012, 10:25 »

Как сделать, чтобы keyPressEvent() обрабатывал нажатие клавиши при русской раскладке? Например, такой код работает при английской раскладке, а при русской - не реагирует на нажатие клавиши Z:
Код:
class MyLabel : public QLabel 
{
 public:
    void keyPressEvent(QKeyEvent* pe)
    {
if (pe ->key() == 0x5A) qDebug() << "Z";
    }
};
Записан
Bepec
Гость
« Ответ #1 : Ноябрь 19, 2012, 10:30 »

Сканкоды вам в помощь.
Или, насколько я помню, необходимо пару бит отбрасывать. (недостоверная информация!)
Записан
alsav22
Гость
« Ответ #2 : Ноябрь 19, 2012, 10:34 »

Сканкоды вам в помощь.
Ещё бы и как... По идее, тут как раз и должны скан коды использоваться, но почему-то не работает.
Записан
Bepec
Гость
« Ответ #3 : Ноябрь 19, 2012, 10:37 »

key возвращает клавишу, определённую списком Qt.

А pe->scanCode() вернёт то, что вам надо, ннэ?
Записан
alsav22
Гость
« Ответ #4 : Ноябрь 20, 2012, 09:04 »

Цитировать
key возвращает клавишу, определённую списком Qt.
В том то и дело, что нет. Получается так. Если нажать "Z" при английской раскладке, то key() выдаст код 90(5A) (что соответствует списку Qt), nativeScanCode() - 44(2С). При русской раскладке: key() - 1071(42F), nativeScanCode() - 44(2С). Правильно, в двух раскладках, работает nativeVirtualKey(). Выдаёт 90(5А).
« Последнее редактирование: Ноябрь 20, 2012, 09:06 от alsav22 » Записан
Bepec
Гость
« Ответ #5 : Ноябрь 20, 2012, 09:30 »

Не понял вашей реплики.

Вы указываете, что Native scan code  у вас одинаков в обоих случаях. Что вам ещё надо?
... nativeScanCode() - 44(2С). ...  nativeScanCode() - 44(2С). ...

PS если вы хотите получить русскую букву по key() - вынужден вас разочаровать. В списке Qt имеются только английские клавиши. Чтобы выводить русскую или английскую букву, нужно брать 2 таблицы скан кодов (Ru/Eng) и проверять раскладку Api ОС.
« Последнее редактирование: Ноябрь 20, 2012, 09:32 от Bepec » Записан
alsav22
Гость
« Ответ #6 : Ноябрь 20, 2012, 10:03 »

Цитировать
Что вам ещё надо?
Хотел, чтобы метод возвращал код, соответствующий списку Qt (значение из перечисления Key), при двух раскладках. Именно, соответствующий списку Qt (поэтому nativeScanCode() не подошёл, хотя можно и его использовать, в этом вы правы). Такой метод мне подсказали на другом форуме: nativeVirtualKey()
« Последнее редактирование: Ноябрь 20, 2012, 10:06 от alsav22 » Записан
Bepec
Гость
« Ответ #7 : Ноябрь 20, 2012, 10:28 »

Ну таки и используйте. Флаг вам в руки, nativeScanCode на шею Улыбающийся
Записан
alsav22
Гость
« Ответ #8 : Ноябрь 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).
Насколько я понял, не совсем  кроссплатформенный метод.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.186 секунд. Запросов: 21.