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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Обработка двух одновременно клавиш  (Прочитано 5196 раз)
fuCtor
Гость
« : Декабрь 02, 2009, 14:55 »

Как можно обработать две одновременно нажатые клавиши, к примеру стрелки вверх и влево? Для QKeySequence не подходит, а событие о нажатии приходит только для одной.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Декабрь 02, 2009, 17:02 »

>>а событие о нажатии приходит только для одной.
А может приходит несколько событий, одно за другим?
Записан

Юра.
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #2 : Декабрь 02, 2009, 17:04 »

А вообще QKeySequence поддерживает стиль GNU Emacs :

 QKeySequence(tr("Ctrl+X, Ctrl+C"))
 QKeySequence(Qt::CTRL + Qt::Key_X, Qt::CTRL + Qt::Key_C)
Записан

Юра.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Декабрь 02, 2009, 17:18 »

Как можно обработать две одновременно нажатые клавиши, к примеру стрелки вверх и влево? Для QKeySequence не подходит, а событие о нажатии приходит только для одной.
Как Юра сказал, приходят 2 события последовательно, поэтому надо перекрывать keyPressEvent и keyReleaseEvent и отслеживать нажато/отжато
Записан
fuCtor
Гость
« Ответ #4 : Декабрь 03, 2009, 08:32 »

Так и сделал, только пришлось еще контролировать момент потери фокуса, иначе не приходило сообщение о отпускании клавиш.
Записан
sendevent
Гость
« Ответ #5 : Декабрь 03, 2009, 15:31 »

Qt::WA_KeyCompression:
Цитировать
<...>By default key compression is off, so widgets receive one key press event for each key press (or more, since autorepeat is usually on). If you turn it on and your program doesn't keep up with key input, Qt may try to compress key events so that more than one character can be processed in each event<...>
Записан
uriel
Гость
« Ответ #6 : Декабрь 03, 2009, 16:14 »

А как же окончание? Улыбающийся
Цитировать
Qt performs key event compression only for printable characters. Qt::Modifier keys, cursor movement keys, function keys and miscellaneous action keys (e.g. Escape, Enter, Backspace, PrintScreen) will stop key event compression, even if there are more compressible key events available. Platforms other than Mac and X11 do not support this compression, in which case turning it on will have no effect. This is set/cleared by the widget's author.
Записан
sendevent
Гость
« Ответ #7 : Декабрь 03, 2009, 16:55 »

А как же окончание? Улыбающийся
Хе-хе-хе, каюсь, протупил - сам использовал как раз для чаров, про остальное как-то не обратил внимания.
*пошел делать харакирю
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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