crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в QEvent::KeyPress и раскладка
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
512es Дата 8.12.2009, 10:59
 
Цитата(SABROG @ 7.12.2009, 19:10) *
Повторюсь, Qt::Key смотрел? Сомневаюсь, что коды Qt::Key_A-Qt::Key_Z будут иными даже при русской раскладке.


Смотрел. Проблема в том, как преобразовать из keyEvent->key() в Qt::Key?

qDebug() << keyEvent->key() << keyEvent->nativeVirtualKey() << keyEvent->nativeScanCode() << keyEvent->text() << event;

Цитата
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).
Я попытался им воспользоваться:
    if (event->type() == QEvent::KeyPress) {
        QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);;
        qDebug() << keyEvent->nativeScanCode() << decryptScanCodeKey(keyEvent->nativeScanCode());
    }

QChar MainWindow::decryptScanCodeKey(int key)
{
    QHash<QChar,int> hash;
    hash.insert('q',24);
    hash.insert('w',25);
    hash.insert('e',26);
    hash.insert('r',27);
    hash.insert('t',28);
    hash.insert('y',29);
    return hash.key(key);
}


Но и тут неудача! На ноутбуке с линуксом клавишам 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)
SABROG Дата 7.12.2009, 19:10
  Повторюсь, Qt::Key смотрел? Сомневаюсь, что коды Qt::Key_A-Qt::Key_Z будут иными даже при русской раскладке.
512es Дата 7.12.2009, 18:59
  Делать таблицу перекодировки - это последнее чем я хотел бы заняться. Разве Qt ничего не знает о раскладках клавиатуры? Как, например, о кодеках.. Разве нельзя как то умно конвентировать символы? Или средствами Qt быстро сменить раскладку, в момент получения строки символов..

Если, конечно, ничего этого делать нельзя, средствами Qt.. То придётся изобретать велосипед..
trdm Дата 7.12.2009, 17:41
 
Цитата(512es @ 7.12.2009, 16:12) *
ап =(

Кули ап?
Делай таблицу перекодировки и развлекайся посимвольно.
или ждешь, что напишут за тебя?
SABROG Дата 7.12.2009, 17:39
  Так?

  if(!event->text().isEmpty())
    qDebug() << event->text().toAscii().toHex();


Плюс int QKeyEvent::key () const, чтобы понять какая буковка, смотри enum Qt::Key.
512es Дата 7.12.2009, 16:12
  ап =(
512es Дата 1.12.2009, 11:23
  ап.. тема ещё актуальна..
Litkevich Yuriy Дата 30.11.2009, 13:36
 
Цитата(512es @ 30.11.2009, 14:07) *
Наверное надо как то через QTextCodec найти соответствие нажатым клавишам.
не понимаю при чём здесь кодек.
512es Дата 30.11.2009, 11:57
  Выяснил что QEvent::KeyboardLayoutChange вызывается при смене раскладки..
512es Дата 30.11.2009, 11:07
  Всем привет!

В продолжении этой темы.
Хочу поднять соседнюю тему по вопросу о раскладке клавиатуры во время отлавливания нажатий клавиш.

Задача: считывать символы с клавиатуры в английской раскладке, если даже была выбрана русская (или ещё какая) раскладка.
Например "Hello World!", даже если мы набрали "Руддщ Цщкдв!". А-ля пунто.

Наверное надо как то через QTextCodec найти соответствие нажатым клавишам.. Но не знаю как(
В крайнем случае можно конечно набить вручную массив с соответствием символов, но это кривоватое решение..
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 12:57