qt eventfilter按键不执行任何操作

qt eventfilter按键不执行任何操作,qt,animation,keypress,eventfilter,Qt,Animation,Keypress,Eventfilter,我开始使用QT,并想编写一个名为Pong(两人一球)的小游戏。应使用“W”和“S”键移动左侧玩家,使用上下箭头键移动右侧玩家。我有一个班级游戏来处理我的动画。我有一个事件过滤器来处理按键 bool Game::eventFilter(QObject *target, QEvent *e) { Q_UNUSED(target); bool handled = false; if(e->type() == QEvent::KeyPress) {

我开始使用QT,并想编写一个名为Pong(两人一球)的小游戏。应使用“W”和“S”键移动左侧玩家,使用上下箭头键移动右侧玩家。我有一个班级游戏来处理我的动画。我有一个事件过滤器来处理按键

bool Game::eventFilter(QObject *target, QEvent *e)
{
    Q_UNUSED(target);

    bool handled = false;
    if(e->type() == QEvent::KeyPress)
    {
        QKeyEvent *keyEvent = (QKeyEvent *)e;

        if(keyEvent->key() == Qt::Key_W)
        {
            leftPlayerDir = ((leftPlayerDir == 0) ? 5 : leftPlayerDir);
            handled = true;
        }
        else if(keyEvent->key() == Qt::Key_S)
        {
            leftPlayerDir  = ((leftPlayerDir == 0) ? -5 : leftPlayerDir);
            handled = true;
        }
        else if(keyEvent->key() == Qt::Key_Up)
        {
            rightPlayerDir  = ((rightPlayerDir == 0) ? 5 : rightPlayerDir);
            handled = true;
        }
        else if(keyEvent->key() == Qt::Key_Down)
        {
            rightPlayerDir  = ((rightPlayerDir == 0) ? -5 : rightPlayerDir);
            handled = true;
        }
    }
     return handled;
}
在我的Pong课程中,我设置了主窗口并处理按钮,我有一行代码来安装eventfilter

ui->animation->installEventFilter(game);

如果我启动了我的程序,动画就开始工作了,但是玩家没有按键盘移动,我也不知道为什么。一些想法?

事件过滤器仅在小部件具有焦点时触发。因为它没有被触发,所以它没有焦点。您可能希望在具有焦点的小部件上安装eventFilter。Ja,das stimmt,aber wenn ich ein Spiel starte,rufe ich an
ui->animation->setFocus()
在我的QGraphicsView上设置焦点,然后eventFilter应该可以工作,但我不能在某个地方安装eventFilter以始终获得keyEvent?独立于focus和widget?您可以创建应用程序范围的快捷方式。请参阅-
setFocus
可能会很快丢失,最好在按键时确定哪个小部件具有焦点,然后在其上安装eventFilter。