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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сканкоды Linux и Windows  (Прочитано 5342 раз)
Dimas
Чайник
*
Offline Offline

Сообщений: 50



Просмотр профиля
« : Февраль 26, 2013, 10:19 »

Написал обработчик нажатия клавиш:
.h
Код:
 void keyPressEvent(QKeyEvent *e);
.cpp
Код:
void Dialog::keyPressEvent(QKeyEvent *e)
{
    qDebug() << QString("Key=%1 Scan=%2").arg(e->text()).arg(e->nativeScanCode());
}

В Windows при нажатии клавиш "a s d f g h" и т.д. получаю в окне debug:
Цитировать
"Key=a Scan=30"
"Key=s Scan=31"
"Key=d Scan=32"
"Key=f Scan=33"
"Key=g Scan=34"

В Linux получаю в окне debug:
Цитировать
"Key=a Scan=38"
"Key=s Scan=39"
"Key=d Scan=40"
"Key=f Scan=41"
"Key=g Scan=42"
"Key=h Scan=43"

Как мне получить одинаковые сканкоды клавиш для кросс платформенной работы с клавиатурой в Windows и Linux?
Записан

qt 4.8.6, qt 5.12.4
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Февраль 26, 2013, 10:22 »

Код
C++ (Qt)
int QKeyEvent::key () const
Записан

Qt 5.11/4.8.7 (X11/Win)
Dimas
Чайник
*
Offline Offline

Сообщений: 50



Просмотр профиля
« Ответ #2 : Февраль 26, 2013, 10:29 »

Да, все работает. Спасибо
Код:
    qDebug() << QString("text=%1 nativeScanCode=%2 key=%3").arg(e->text()).arg(e->nativeScanCode()).arg(e->key());

windows
Цитировать
"text=a nativeScanCode=30 key=65"
"text=s nativeScanCode=31 key=83"
"text=d nativeScanCode=32 key=68"
"text=f nativeScanCode=33 key=70"
"text=g nativeScanCode=34 key=71"

linux
Цитировать
"text=a nativeScanCode=38 key=65"
"text=s nativeScanCode=39 key=83"
"text=d nativeScanCode=40 key=68"
"text=f nativeScanCode=41 key=70"
"text=g nativeScanCode=42 key=71"
« Последнее редактирование: Февраль 26, 2013, 10:37 от Dimas » Записан

qt 4.8.6, qt 5.12.4
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Февраль 26, 2013, 10:37 »

Тоже не совпадают коды
Странное утверждение.
Ты уверен, что под linux всё пересобралось?

Цитата: assistant
These codes are independent of the underlying window system.
Записан

Qt 5.11/4.8.7 (X11/Win)
carrygun
Гость
« Ответ #4 : Февраль 26, 2013, 10:37 »

Скан коды у windows и linux не совпадают.
Записан
Dimas
Чайник
*
Offline Offline

Сообщений: 50



Просмотр профиля
« Ответ #5 : Февраль 26, 2013, 10:38 »

Да, не пересобралось, сейчас все ок.
Записан

qt 4.8.6, qt 5.12.4
Dimas
Чайник
*
Offline Offline

Сообщений: 50



Просмотр профиля
« Ответ #6 : Февраль 26, 2013, 11:02 »

Только эти коды отличаются в зависимости от выбранной раскладки клавиатуры.

windows
Цитировать
"text=ф nativeScanCode=30 key=1060"
"text=a nativeScanCode=30 key=65"

linux
Цитировать
"text=ф nativeScanCode=38 key=1060"
"text=a nativeScanCode=38 key=65"

Как мне кроссплатформенно знать, что нажата допустим клавиша "S" в Linux и Windows?
« Последнее редактирование: Февраль 26, 2013, 11:10 от Dimas » Записан

qt 4.8.6, qt 5.12.4
carrygun
Гость
« Ответ #7 : Февраль 26, 2013, 11:17 »

Код
C++ (Qt)
if (e->key() == Qt::Key_S) ...
Записан
Dimas
Чайник
*
Offline Offline

Сообщений: 50



Просмотр профиля
« Ответ #8 : Февраль 26, 2013, 11:23 »

Я имел ввиду клавиша на клавиатуре "S" ("Ы"), если будет включена русская раскладка клавиатуры, этот код не сработает. А, если будет еще другой неизвестный язык, я не смогу узнать, что нажата эта клавиша
Записан

qt 4.8.6, qt 5.12.4
carrygun
Гость
« Ответ #9 : Февраль 26, 2013, 11:31 »

Делать свой кеймаппер.
Записан
IGreench
Гость
« Ответ #10 : Март 14, 2013, 18:09 »

Разве не сработает? Я думал всегда, что наоборот - так и работает.

Хотя может с .net'ом путаю...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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