c++ - 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 毫秒发送一个我们控制的对象。
keysClicked
set 应该能够包含所有当前按下的键。
还有一个问题,因为它应该包含空格键、key_up 以及 key_left 或 key_right:
- 当我拿着它时它可以正常工作
spacebar, key_up and key_right
- 当我按住时它不起作用
spacebar, key_up and key_left
(在 eventFilter 中找不到左键按下) - 当我拿着它时它可以正常工作
key_up and key_left
有人可以解释一下问题是什么,我该如何解决?(第 2 点。)
解决方案
推荐阅读
- c++ - 如何使用 2D 向量进行 O(n log n) 排序(没有#include
) - c# - XamlUICommand 似乎缺少 Execute() 方法
- python - 在 Django 中查询多对多关系
- amazon-web-services - AWS SES - 检查哪个已验证的电子邮件导致超出限制
- pandas - 如何在具有相同值的其他列上添加新功能
- css - ntd child 无法正常工作如何解决
- google-cloud-platform - Google Cloud Platform 是否倾向于将其新功能发布到特定位置?
- html - 为什么在将数据从 html 表单输入数据库时,我总是得到“未定义”
- sql - 使用只能访问数据库的 SQL 帐户访问同一网络上另一台 PC 上的文件
- javascript - Jquery点击事件未触发