QEvent::KeyPress и раскладка, А-ля пунто... |
Здравствуйте, гость ( Вход | Регистрация )
QEvent::KeyPress и раскладка, А-ля пунто... |
512es |
30.11.2009, 11:07
Сообщение
#1
|
Участник Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: 0 |
Всем привет!
В продолжении этой темы. Хочу поднять соседнюю тему по вопросу о раскладке клавиатуры во время отлавливания нажатий клавиш. Задача: считывать символы с клавиатуры в английской раскладке, если даже была выбрана русская (или ещё какая) раскладка. Например "Hello World!", даже если мы набрали "Руддщ Цщкдв!". А-ля пунто. Наверное надо как то через QTextCodec найти соответствие нажатым клавишам.. Но не знаю как( В крайнем случае можно конечно набить вручную массив с соответствием символов, но это кривоватое решение.. |
|
|
512es |
30.11.2009, 11:57
Сообщение
#2
|
Участник Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: 0 |
Выяснил что QEvent::KeyboardLayoutChange вызывается при смене раскладки..
|
|
|
Litkevich Yuriy |
30.11.2009, 13:36
Сообщение
#3
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
512es |
1.12.2009, 11:23
Сообщение
#4
|
Участник Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: 0 |
ап.. тема ещё актуальна..
|
|
|
512es |
7.12.2009, 16:12
Сообщение
#5
|
Участник Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: 0 |
ап =(
|
|
|
SABROG |
7.12.2009, 17:39
Сообщение
#6
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Так?
Плюс int QKeyEvent::key () const, чтобы понять какая буковка, смотри enum Qt::Key. Сообщение отредактировал SABROG - 7.12.2009, 17:43 |
|
|
trdm |
7.12.2009, 17:41
Сообщение
#7
|
Дмитрий Трошин Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: 6 |
|
|
|
512es |
7.12.2009, 18:59
Сообщение
#8
|
Участник Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: 0 |
Делать таблицу перекодировки - это последнее чем я хотел бы заняться. Разве Qt ничего не знает о раскладках клавиатуры? Как, например, о кодеках.. Разве нельзя как то умно конвентировать символы? Или средствами Qt быстро сменить раскладку, в момент получения строки символов..
Если, конечно, ничего этого делать нельзя, средствами Qt.. То придётся изобретать велосипед.. |
|
|
SABROG |
7.12.2009, 19:10
Сообщение
#9
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Повторюсь, Qt::Key смотрел? Сомневаюсь, что коды Qt::Key_A-Qt::Key_Z будут иными даже при русской раскладке.
|
|
|
512es |
8.12.2009, 10:59
Сообщение
#10
|
Участник Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: 0 |
Повторюсь, Qt::Key смотрел? Сомневаюсь, что коды Qt::Key_A-Qt::Key_Z будут иными даже при русской раскладке. Смотрел. Проблема в том, как преобразовать из keyEvent->key() в Qt::Key?
Цитата 81 81 16 "q" QKeyEvent(KeyPress, 51, 0, ""q"", false, 1) 87 87 17 "w" QKeyEvent(KeyPress, 57, 0, ""w"", false, 1) 69 69 18 "e" QKeyEvent(KeyPress, 45, 0, ""e"", false, 1) 82 82 19 "r" QKeyEvent(KeyPress, 52, 0, ""r"", false, 1) 84 84 20 "t" QKeyEvent(KeyPress, 54, 0, ""t"", false, 1) 89 89 21 "y" QKeyEvent(KeyPress, 59, 0, ""y"", false, 1) 1049 81 16 "й" QKeyEvent(KeyPress, 419, 0, ""й"", false, 1) 1062 87 17 "ц" QKeyEvent(KeyPress, 426, 0, ""ц"", false, 1) 1059 69 18 "у" QKeyEvent(KeyPress, 423, 0, ""у"", false, 1) 1050 82 19 "к" QKeyEvent(KeyPress, 41a, 0, ""к"", false, 1) 1045 84 20 "е" QKeyEvent(KeyPress, 415, 0, ""е"", false, 1) 1053 89 21 "н" QKeyEvent(KeyPress, 41d, 0, ""н"", false, 1) Из постоянных величин тут только третий параметр (nativeScanCode). Я попытался им воспользоваться:
Но и тут неудача! На ноутбуке с линуксом клавишам qwerty соответствовали коды 24-29, а на машине с виндовсом 16-21. От чего это зависит, не знаю.. Толи от модели клавиатуры, толи от операционной системы.. Только что заметил что и keyEvent->nativeVirtualKey() тоже константа, при переключении раскладки. Правда слышал, что в других ОС она отличается.. Проверю. Вот что под линуксом: Цитата 81 113 24 "q" QKeyEvent(KeyPress, 51, 0, ""q"", false, 1)
87 119 25 "w" QKeyEvent(KeyPress, 57, 0, ""w"", false, 1) 69 101 26 "e" QKeyEvent(KeyPress, 45, 0, ""e"", false, 1) 82 114 27 "r" QKeyEvent(KeyPress, 52, 0, ""r"", false, 1) 84 116 28 "t" QKeyEvent(KeyPress, 54, 0, ""t"", false, 1) 89 121 29 "y" QKeyEvent(KeyPress, 59, 0, ""y"", false, 1) 1049 1738 24 "й" QKeyEvent(KeyPress, 419, 0, ""й"", false, 2) 1062 1731 25 "ц" QKeyEvent(KeyPress, 426, 0, ""ц"", false, 2) 1059 1749 26 "у" QKeyEvent(KeyPress, 423, 0, ""у"", false, 2) 1050 1739 27 "к" QKeyEvent(KeyPress, 41a, 0, ""к"", false, 2) 1045 1733 28 "е" QKeyEvent(KeyPress, 415, 0, ""е"", false, 2) 1053 1742 29 "н" QKeyEvent(KeyPress, 41d, 0, ""н"", false, 2) Сообщение отредактировал 512es - 8.12.2009, 11:24 |
|
|
Текстовая версия | Сейчас: 27.12.2024, 22:48 |