Цитата(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)