Всем привет!
В продолжении этой http://www.forum.crossplatform.ru/index.php?showtopic=3831&st=0.
Хочу поднять соседнюю тему по вопросу о раскладке клавиатуры во время отлавливания нажатий клавиш.
Задача: считывать символы с клавиатуры в английской раскладке, если даже была выбрана русская (или ещё какая) раскладка.
Например "Hello World!", даже если мы набрали "Руддщ Цщкдв!". А-ля пунто.
Наверное надо как то через QTextCodec найти соответствие нажатым клавишам.. Но не знаю как(
В крайнем случае можно конечно набить вручную массив с соответствием символов, но это кривоватое решение..
Выяснил что QEvent::KeyboardLayoutChange вызывается при смене раскладки..
ап.. тема ещё актуальна..
ап =(
Так?
if(!event->text().isEmpty())
qDebug() << event->text().toAscii().toHex();
Делать таблицу перекодировки - это последнее чем я хотел бы заняться. Разве Qt ничего не знает о раскладках клавиатуры? Как, например, о кодеках.. Разве нельзя как то умно конвентировать символы? Или средствами Qt быстро сменить раскладку, в момент получения строки символов..
Если, конечно, ничего этого делать нельзя, средствами Qt.. То придётся изобретать велосипед..
Повторюсь, http://doc.qt.nokia.com/4.6/qt.html#Key-enum смотрел? Сомневаюсь, что коды Qt::Key_A-Qt::Key_Z будут иными даже при русской раскладке.
qDebug() << keyEvent->key() << keyEvent->nativeVirtualKey() << keyEvent->nativeScanCode() << keyEvent->text() << event;
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);
}
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)