Russian Qt Forum

Qt => Общие вопросы => Тема начата: Dimas от Февраль 26, 2013, 10:19



Название: Сканкоды Linux и Windows
Отправлено: Dimas от Февраль 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?


Название: Re: Сканкоды Linux и Windows
Отправлено: GreatSnake от Февраль 26, 2013, 10:22
Код
C++ (Qt)
int QKeyEvent::key () const


Название: Re: Сканкоды Linux и Windows
Отправлено: Dimas от Февраль 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"


Название: Re: Сканкоды Linux и Windows
Отправлено: GreatSnake от Февраль 26, 2013, 10:37
Тоже не совпадают коды
Странное утверждение.
Ты уверен, что под linux всё пересобралось?

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


Название: Re: Сканкоды Linux и Windows
Отправлено: carrygun от Февраль 26, 2013, 10:37
Скан коды у windows и linux не совпадают.


Название: Re: Сканкоды Linux и Windows
Отправлено: Dimas от Февраль 26, 2013, 10:38
Да, не пересобралось, сейчас все ок.


Название: Re: Сканкоды Linux и Windows
Отправлено: Dimas от Февраль 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?


Название: Re: Сканкоды Linux и Windows
Отправлено: carrygun от Февраль 26, 2013, 11:17
Код
C++ (Qt)
if (e->key() == Qt::Key_S) ...


Название: Re: Сканкоды Linux и Windows
Отправлено: Dimas от Февраль 26, 2013, 11:23
Я имел ввиду клавиша на клавиатуре "S" ("Ы"), если будет включена русская раскладка клавиатуры, этот код не сработает. А, если будет еще другой неизвестный язык, я не смогу узнать, что нажата эта клавиша


Название: Re: Сканкоды Linux и Windows
Отправлено: carrygun от Февраль 26, 2013, 11:31
Делать свой кеймаппер.


Название: Re: Сканкоды Linux и Windows
Отправлено: IGreench от Март 14, 2013, 18:09
Разве не сработает? Я думал всегда, что наоборот - так и работает.

Хотя может с .net'ом путаю...