J'ai une application (non liée à un jeu où les touches W/A/S/D peuvent avoir des significations spéciales pour la navigation) QFrame
. J'ai dépassé le keyPressEvent()
pour que le texte soit tapé au clavier tout en mettant l'accent sur ce QFrame
. Ceci est mon code:Qt keyPressEvent ne pas enregistrer lorsque les touches W/A/S/D sont pressées
void MyFrame::keyPressEvent(QKeyEvent *event)
{
qDebug() << "At least came here" << endl;
QString text = event->text();
qDebug() << "Text: " << text << endl;
}
Lorsque je tape des caractères à partir du clavier un à la fois, pour tous les caractères et les nombres, les deux déclarations sont enregistrées correctement. Mais pour ces quatre clés, aucune des instructions log n'est exécutée, c'est-à-dire que le gestionnaire d'événements ne tire même pas. Qu'est-ce qui ne va pas? Edit: Après avoir parcouru les exemples, j'ai essayé de former un exemple de travail minimal de mon bogue. C'est ce que j'ai. Même problème ici avec le filtre d'événement. Seulement pour ces quatre caractères, il n'est pas connecté.
bool MyWidget::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::KeyPress)
{
//this never gets printed
qDebug() << "Phew!" << endl;
return true;
}
if (qobject_cast<ChildWidget *>(obj) != nullptr)
{
ChildWidget *option = qobject_cast<ChildWidget *>(obj);
if (event->type() == QEvent::Enter || event->type() == QEvent::MouseMove)
{
//do stuff
return true;
}
if (event->type() == QEvent::Leave)
{
//do stuff
return true;
}
return QWidget::eventFilter(obj, event);
}
else
{
// pass the event on to the parent class
return QWidget::eventFilter(obj, event);
}
}
MyWidget::MyWidget()
{
//do other initialization
this->installEventFilter(this);
}
void MyWidget::keyPressEvent(QKeyEvent *event)
{
qDebug("At least came here");
QString text = event->text();
//this prints out whenever I type any character, excpet W/A/S/D
qDebug() << text;
}
Avez-vous vérifié que cet événement n'est pas traité ailleurs? Comme un widget parent contenant MyFrame préemptant le processus? –
Non, il n'y a pas un tel cas .. – SexyBeast
Existe-t-il un raccourci global défini dans une autre application? J'ai eu un cas similaire quand les raccourcis de foobar ont intercepté le mien – Zeks