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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Долгие нажатия клавиш  (Прочитано 4804 раз)
tohisu
Гость
« : Январь 10, 2010, 11:34 »

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

Эта штука называется "Автоповтор клавиш" ну или как-нибудь так - зависит от ОС.
Сам в своё время замучился с этим воевать. Под иксами оно отключается элементарно, а вот под виндой так и не поборол (хотя винда, работающая в виртуальной машине под иксами ведёт себя в этом плане просто замечательно Улыбающийся).
Так что скорее всего Вам нужно смотреть в сторону настроек этого устройства.
Записан
tohisu
Гость
« Ответ #2 : Январь 10, 2010, 12:00 »

На девайсе стоит линух, но я использую QtEmbedded, т.е. X-Window там не используется... В каком месте копать?
Записан
Dendy
Гость
« Ответ #3 : Январь 10, 2010, 12:07 »

Насколько я понимаю - повторное событие приходит от самой ОС. Нужно отключить или в оконной системе (?), или просто смотреть если установлен флаг QKeyEvent::isAutoRepeat() - игнорировать это событие.
Записан
Dendy
Гость
« Ответ #4 : Январь 10, 2010, 12:09 »

Если используется QWS, можете посмотреть как работает класс QWSKeyboardHandler, генерирующий события клавиатуры.
Записан
tohisu
Гость
« Ответ #5 : Январь 10, 2010, 17:32 »

Насколько я понимаю - повторное событие приходит от самой ОС. Нужно отключить или в оконной системе (?), или просто смотреть если установлен флаг QKeyEvent::isAutoRepeat() - игнорировать это событие.

Спасибо! QKeyEvent::isAutoRepeat() - то что надо!  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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