Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QT如何检查按键是否按下?_C++_Qt_Keypress_Qt Events - Fatal编程技术网

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!";});