首页 > 解决方案 > QT 事件过滤器不适用于多个按钮

问题描述

我正在尝试在 QT 中创建一个简单的游戏,它使用事件过滤器来捕捉按下的键。它工作正常,直到我在按下空格按钮后实现“加速”。我在主窗口中有这样的方法:

QSet<int> keysClicked; //declared in header

bool MainClass::eventFilter(QObject* target, QEvent* event)
{
    if(event->type()==QEvent::KeyPress)
    {
        keysClicked.insert(static_cast<QKeyEvent*>(event)->key());
        qDebug() << static_cast<QKeyEvent*>(event)->key();
    }
    else if(event->type()==QEvent::KeyRelease)
        keysClicked.remove(static_cast<QKeyEvent*>(event)->key());
    return QWidget::eventFilter(target, event);
}

然后是一个计时器,它keysClicked每 n 毫秒发送一个我们控制的对象。

keysClickedset 应该能够包含所有当前按下的键。

还有一个问题,因为它应该包含空格键、key_up 以及 key_left 或 key_right:

  1. 当我拿着它时它可以正常工作spacebar, key_up and key_right
  2. 当我按住时它不起作用spacebar, key_up and key_left(在 eventFilter 中找不到左键按下)
  3. 当我拿着它时它可以正常工作key_up and key_left

有人可以解释一下问题是什么,我该如何解决?(第 2 点。)

标签: c++qteventskeypresseventfilter

解决方案


推荐阅读