我有一个应用程序(与 W/A/S/D 键可能对导航有特殊意义的任何游戏无关),其中有一个QFrame. 我覆盖了keyPressEvent()通过键盘输入的文本,同时专注于它QFrame。这是我的代码:
void MyFrame::keyPressEvent(QKeyEvent *event)
{
qDebug() << "At least came here" << endl;
QString text = event->text();
qDebug() << "Text: " << text << endl;
}
当我一次从键盘输入一个字符时,对于所有字符和数字,两个语句都被正确记录。但是对于这四个键,日志语句都没有执行,即事件处理程序甚至没有触发。怎么了?
编辑:通过示例后,我尝试形成我的错误的最小工作示例。这就是我所拥有的。通过事件过滤器执行此操作也存在同样的问题。只有这四个字符才不会被记录。
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;
}