Lançamentos da tecla modificadora Catching Qt

Eu sou um recém-chegado ao Qt, mas estou tentando implementar o que basicamente equivale a um loop de entrada do tipo video-game em um aplicativo Qt (louco, eu sei, mas veja se você pode ajudar). Preciso de um tratamento de eventos preciso e individual para pressionar as teclase lançamentos de chaves, para todas as teclas, incluindo modificadores, não importa o quão estranho você acorde o teclado.

Claro, o seu principal acesso a eventos-chave é através deQKeyEvent. Mas vamos dizer o seguinte acontece:

o usuário pressiona e retémCtrlo usuário pressiona e retémAcimalançamentos de usuáriosCtrl eAcima simultaneamente

Tanto quanto eu posso dizer, o que eu recebo do Qt é:

QKeyEvent pela prensagem deCtrl, por si próprio (Qt::Key_Ctrl)QKeyEvent pela prensagem deAcima, por si próprio (Qt::Key_Up)QKeyEvent para a liberação deCtrl + Upcomkey() == Qt::Key_Up e o bit Ctrl refletido em uma mudança de modificador.

Isso pode não ser exatamente preciso, mas é o meu melhor palpite sobre o que está acontecendo com a depuração excessiva do problema. Em qualquer caso, a chavelançamento eventos quando modificadores estão envolvidos sãoincrivelmente não confiável.

A seqüência Ctrl + Up no final é o problema. Agora, eu sei que estou recebendo o estado modificador eme->modifiers(), e eu estou recebendo a tecla de pressionamentoe->key(). Eu poderia fazer alguns hacks complicados, tentando lembrar o estado do modificador internamente, para detectar quando o usuário liberou o modificador. Mas então, o Qt docs me informa, falando dee->modifiers(), naquela:

Esta função nem sempre pode ser confiável. O usuário pode confundi-lo pressionando as duas teclas Shift simultaneamente e liberando uma delas, por exemplo.

Este é exatamente o caso que estou tentandoevitar.

Existe alguma maneira confiável de acompanhar os pressionamentos e liberações de teclas um para um, tanto para as teclas normais quanto para as modificadoras, no Qt? Se não, qual é o mais próximo que você consegue?

EDITAR: Eu posso refinar isso um pouco. Parece que se você segurarCmd em um Mac, pressione algumas teclas (teclas de letras, por exemplo), libere-as e solte-asCmd, tuNão receba eventos de lançamento para os lançamentos de chave de carta. Vou tentar isolar um pequeno exemplo e ver se isso é realmente um bug do Qt.

questionAnswers(2)

yourAnswerToTheQuestion