C++ QT如何检查按键是否按下?
我想随时检查一下这个键是否被按下。我设想这样一种解决办法:C++ QT如何检查按键是否按下?,c++,qt,keypress,qt-events,C++,Qt,Keypress,Qt Events,我想随时检查一下这个键是否被按下。我设想这样一种解决办法: void MyQQuickPaintedItem::keyPressEvent(QKeyEvent * event) { isKeyPressed[ event->key() ] = 1; } void MyQQuickPaintedItem::keyReleaseEvent(QKeyEvent *event) { isKeyPressed[ event->key() ] = 0; } 要检查右箭头键是否
void MyQQuickPaintedItem::keyPressEvent(QKeyEvent * event)
{
isKeyPressed[ event->key() ] = 1;
}
void MyQQuickPaintedItem::keyReleaseEvent(QKeyEvent *event)
{
isKeyPressed[ event->key() ] = 0;
}
要检查右箭头键是否按下,只需检查isKeyPressed[Qt::key\u right]
值即可
我实现了它并且。。。它不起作用。我不是说程序崩溃了isKeyPressed[Qt::Key\u Right]
始终为0,即使我按下了这个向右箭头键或任何其他键
编辑:
头文件之一:
...
bool isKeyPressed[255];
...
其中一个链接文件:
...
extern bool isKeyPressed[255];
...
我不知道按下的
键应该有多大,但我没有得到SIGSEGV,所以大小可能还可以。你通常不会这样解决问题。。。至少不使用QT
如果您有兴趣“捕获”一些按键事件,那么Qt提供了一些方法
你可以做的是“连接”到一个lambda或插槽的快捷方式,并在里面做任何你需要的。。。例如,当用户按下“control+i”时捕捉
connect(新的QShortcut(QKeySequence(Qt::CTRL+Qt::Key_I),这个)&QShortcut::activated,[](){qDebug()你可以使用映射而不是数组,如果你对顺序不感兴趣,那么你可以使用无序的映射,这会更快。键很少,所以我认为程序无论如何都会运行得很快。当你使用调试器运行程序时,你看到了什么?这正是调试器的用途。如果你不知道如何使用一个调试程序,这是一个很好的机会来学习如何使用它来一次运行一个程序,监视所有变量和它们的值,并分析程序的逻辑执行流程。知道如何使用调试器是每个C++开发人员所需要的技能,没有例外。不需要向任何人寻求帮助,快速找到您编写的所有程序和未来程序中的所有错误。您需要提供更多的上下文(最好是a)。一般来说,应用程序只有在当前具有输入焦点的情况下才会接收按键按下/释放事件。好的,因此该方法很好,并且我可能在程序的另一部分中有一个bug?代码非常简单。这些按键…事件函数肯定可以工作(我测试了它们),程序的另一部分只检查isKeyPressed[Qt::Key_Right]的值。您甚至没有提到isKeyPressed的类型。这使得很难判断这是否有效或只是未定义的行为(可能会意外崩溃,也可能不会意外崩溃)。认为只有255个键代码是错误的。返回int
(可能是32位),其中的第一个值是Qt::key\u Escape=0x01000000
。最好记住std::set
中按下的键,然后在keyReleaseEvent()
中将其删除。
connect(new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_I), this), &QShortcut::activated, [](){qDebug() << "Here we are!";});