Russian Qt Forum

Qt => Общие вопросы => Тема начата: fuCtor от Декабрь 02, 2009, 14:55



Название: Обработка двух одновременно клавиш
Отправлено: fuCtor от Декабрь 02, 2009, 14:55
Как можно обработать две одновременно нажатые клавиши, к примеру стрелки вверх и влево? Для QKeySequence не подходит, а событие о нажатии приходит только для одной.


Название: Re: Обработка двух одновременно клавиш
Отправлено: lit-uriy от Декабрь 02, 2009, 17:02
>>а событие о нажатии приходит только для одной.
А может приходит несколько событий, одно за другим?


Название: Re: Обработка двух одновременно клавиш
Отправлено: lit-uriy от Декабрь 02, 2009, 17:04
А вообще QKeySequence поддерживает стиль GNU Emacs :

 QKeySequence(tr("Ctrl+X, Ctrl+C"))
 QKeySequence(Qt::CTRL + Qt::Key_X, Qt::CTRL + Qt::Key_C)


Название: Re: Обработка двух одновременно клавиш
Отправлено: Igors от Декабрь 02, 2009, 17:18
Как можно обработать две одновременно нажатые клавиши, к примеру стрелки вверх и влево? Для QKeySequence не подходит, а событие о нажатии приходит только для одной.
Как Юра сказал, приходят 2 события последовательно, поэтому надо перекрывать keyPressEvent и keyReleaseEvent и отслеживать нажато/отжато


Название: Re: Обработка двух одновременно клавиш
Отправлено: fuCtor от Декабрь 03, 2009, 08:32
Так и сделал, только пришлось еще контролировать момент потери фокуса, иначе не приходило сообщение о отпускании клавиш.


Название: Re: Обработка двух одновременно клавиш
Отправлено: sendevent от Декабрь 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<...>


Название: Re: Обработка двух одновременно клавиш
Отправлено: uriel от Декабрь 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.


Название: Re: Обработка двух одновременно клавиш
Отправлено: sendevent от Декабрь 03, 2009, 16:55
А как же окончание? :)
Хе-хе-хе, каюсь, протупил - сам использовал как раз для чаров, про остальное как-то не обратил внимания.
*пошел делать харакирю