Поймать освобождение ключа модификатора Qt

Я новичок в Qt, но я пытаюсь реализовать то, что в основном равнозначно циклу ввода видеоигр в приложении Qt (без ума, я знаю, но посмотрим, сможете ли вы помочь). Мне нужна точная, однозначная обработка событий для нажатия клавишand ключевые выпуски, для всех клавиш, включая модификаторы, независимо от того, как странно вы настраиваете клавиатуру.

Конечно, ваш основной доступ к ключевым событиям черезQKeyEvent, Но допустим, что происходит следующее:

user presses and holds Ctrl user presses and holds Up user releases Ctrl and Up simultaneously

Насколько я могу судить, что я получаю от Qt:

QKeyEvent for the pressing of Ctrl, by itself (Qt::Key_Ctrl) QKeyEvent for the pressing of Up, by itself (Qt::Key_Up) QKeyEvent for the releasing of Ctrl+Up, with key() == Qt::Key_Up and the Ctrl bit reflected in a modifier change.

Это может быть не совсем точно, но это мое лучшее предположение относительно того, что происходит из-за слишком большой отладки проблемы. В любом случае ключrelease события, когда участвуют модификаторыincredibly ненадежный.

Последовательность Ctrl + Up в конце - это проблема. Теперь я знаю, что получаю состояние модификатора вe->modifiers()и я получаю нажатие клавишиe->key(), Я мог бы сделать несколько сложных хаков, пытаясь запомнить внутреннее состояние модификатора, чтобы определить, когда пользователь выпустил модификатор. Но затем Qt Docs информирует меня, говоря оe->modifiers(), тот:

This function cannot always be trusted. The user can confuse it by pressing both Shift keys simultaneously and releasing one of them, for example.

Это именно тот случай, когда я пытаюсьavoid.

Есть ли надежный способ отслеживать нажатия и отпускания клавиш «один-к-одному», как для обычных, так и для клавиш-модификаторов, в Qt? Если нет, то что вы можете получить ближе всего?

EDIT: Я могу немного уточнить это. Кажется, что если вы удерживаетеCmd на Mac нажмите несколько клавиш (скажем, буквенных), отпустите их, затем отпуститеCmd, выdon't get release events for the letter key releases.  Я попытаюсь выделить небольшой пример и посмотреть, действительно ли это ошибка Qt.

Ответы на вопрос(2)

Ваш ответ на вопрос