Название: Долгие нажатия клавиш Отправлено: 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() - то что надо! :) |