LINUX.ORG.RU

QKeyEvent, убрать интервал между первым и последующими событиями

 , ,


0

2
QApplication::setKeyboardInputInterval(int);

и

if (keyEvent->isAutoRepeat()) keyEvent->ignore();
не предлагать, всё не то.

собственно, нужно для игрушки, где управление осуществляется с клавиатуры.
понятно, что в обыкновенных виджетах autoRepeat нужен, но почему у QPushButton есть такие свойства, как autoRepeatDelay и autoRepeatInterval, а у QGraphicsView нет?



Последнее исправление: CYB3R (всего исправлений: 1)

Ответ на: комментарий от annulen

причём тут он?
в counter strike же нет такого, что вы нажимаете W - игрок чуть движется и останавливается, после чего опять через небольшой интервал начинает двигаться уже непрерывно. можно, конечно, отлавливать событие нажатия, после чего запускать таймер и генерить искусственные события до момента отжатия или потери фокуса, но что-то мне не хочется

vladimirsmirnov9
() автор топика

Вы делаете это неправильно.

После того, как пришел keyPress начинаете движение (m_move = true), после того, как пришел keyRelease прекращаете движение (m_move = false). Само движение должен разруливать ваш игровой движок на основе m_move.

trex6 ★★★★★
()

Делай флажок для каждой клавиши (isKeyUpPressed, к примеру), устанавливай в pressEvent, снимай в releaseEvent.

А в процедуре обработки логики (timer, например) уже обрабатывай этот флаг.

schizoid ★★★
()
Ответ на: комментарий от vladimirsmirnov9

можно, конечно, отлавливать событие нажатия, после чего запускать таймер и генерить искусственные события до момента отжатия или потери фокуса

не можно, а нужно

annulen ★★★★★
()
Ответ на: комментарий от annulen

Для игры - порочный путь. Генерация и обработка событий не бесплатны.

trex6 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.