Russian Qt Forum

Qt => Общие вопросы => Тема начата: tohisu от Январь 10, 2010, 11:34



Название: Долгие нажатия клавиш
Отправлено: tohisu от Январь 10, 2010, 11:34
Добрый день.
Пишу приложение под несколько специфичный девайс. Основная особенность - очень урезанная клавиатура. Фактически есть только цифровая часть и еще несколько специальных клавиш. Вследствии чего пришлось придумывать такую фишку как "долгие нажатия". Суть думаю понятна. Нажимают коротко - генерируется один код символа, нажимают с задержкой > 1 сек. - долгое нажатие и соотвественно другой символ.
А вот с реализацией возникли небольшие проблемы.
Установил eventFilter для QCoreApplication чтобы ловить все события. Изначально предполагал ловить событие KeyDown, включать таймер и при наступлении события KeyUp, останавливать таймер и смотреть сколько времени прошло. После чего самомому уже генерировать событие нажатия клавиши с нужным мне кодом.
Но почему-то нету таких событий у QEvent... Есть только KeyPress и KeyRelease, а они срабатывают много-много раз пока удерживатся клавиша.


Название: Re: Долгие нажатия клавиш
Отправлено: uriel от Январь 10, 2010, 11:45
Эта штука называется "Автоповтор клавиш" ну или как-нибудь так - зависит от ОС.
Сам в своё время замучился с этим воевать. Под иксами оно отключается элементарно, а вот под виндой так и не поборол (хотя винда, работающая в виртуальной машине под иксами ведёт себя в этом плане просто замечательно :)).
Так что скорее всего Вам нужно смотреть в сторону настроек этого устройства.


Название: Re: Долгие нажатия клавиш
Отправлено: tohisu от Январь 10, 2010, 12:00
На девайсе стоит линух, но я использую QtEmbedded, т.е. X-Window там не используется... В каком месте копать?


Название: Re: Долгие нажатия клавиш
Отправлено: Dendy от Январь 10, 2010, 12:07
Насколько я понимаю - повторное событие приходит от самой ОС. Нужно отключить или в оконной системе (?), или просто смотреть если установлен флаг QKeyEvent::isAutoRepeat() - игнорировать это событие.


Название: Re: Долгие нажатия клавиш
Отправлено: Dendy от Январь 10, 2010, 12:09
Если используется QWS, можете посмотреть как работает класс QWSKeyboardHandler, генерирующий события клавиатуры.


Название: Re: Долгие нажатия клавиш
Отправлено: tohisu от Январь 10, 2010, 17:32
Насколько я понимаю - повторное событие приходит от самой ОС. Нужно отключить или в оконной системе (?), или просто смотреть если установлен флаг QKeyEvent::isAutoRepeat() - игнорировать это событие.

Спасибо! QKeyEvent::isAutoRepeat() - то что надо!  :)