Ich habe eine app (nicht auf ein Spiel, wo die W/A/S/D-Taste eines besondere Bedeutung für die Navigation haben kann), wo es ein QFrame
. Ich habe die keyPressEvent()
überschreiben, um den Text zu bekommen, der durch Tastatur eingegeben wird, während ich mich auf das QFrame
konzentriere. Dies ist mein Code:Qt keyPressEvent Registrierung nicht, wenn W/A/S/D-Taste gedrückt wird
void MyFrame::keyPressEvent(QKeyEvent *event)
{
qDebug() << "At least came here" << endl;
QString text = event->text();
qDebug() << "Text: " << text << endl;
}
Wenn ich Zeichen von der Tastatur einer nach dem anderen geben, für alle Zeichen und Zahlen, sind beide Aussagen richtig protokolliert. Aber für diese vier Schlüssel wird keine der Protokollanweisungen ausgeführt, d. H. Der Ereignishandler feuert nicht einmal. Was ist falsch?
Edit: Nachdem ich die Beispiele durchgegangen bin, habe ich versucht, ein minimales funktionierendes Beispiel für meinen Bug zu erstellen. Das ist, was ich habe. Das selbe Problem auch hier mit Ereignisfilter. Nur für diese vier Zeichen wird es nicht protokolliert.
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;
}
Haben Sie überprüft, dass dieses Ereignis nicht an anderer Stelle verarbeitet wird? Wie ein Eltern-Widget mit MyFrame, das den Prozess vorwegnimmt? –
Nein, es gibt keinen solchen Fall. – SexyBeast
Gibt es vielleicht einen globalen Hotkey in einer anderen App definiert? Ich hatte einen ähnlichen Fall, als foobar Hotkeys abgefangen meine – Zeks