我希望能够随时检测按键是否按下。我想象中的解决方案如下:
void MyQQuickPaintedItem::keyPressEvent(QKeyEvent * event)
{
isKeyPressed[ event->key() ] = 1;
}
void MyQQuickPaintedItem::keyReleaseEvent(QKeyEvent *event)
{
isKeyPressed[ event->key() ] = 0;
}
要检查右箭头键是否按下,只需要检查isKeyPressed[Qt::Key_Right]
的值。
我实现了它...但不起作用。我的意思不是程序崩溃。isKeyPressed[Qt :: Key_Right]
始终为0,即使我按下这个右箭头键或任何其他键。
编辑:
其中一个头文件:
...
bool isKeyPressed[255];
...
其中一个链接的文件:
...
extern bool isKeyPressed[255];
...
我不确定isKeyPressed
应该有多大,但是我没有收到SIGSEGV的错误,所以大小可能是可以的。
isKeyPressed
的类型。这使得很难判断它是否有效或者只是未定义行为(可能会偶然崩溃)。 - Scheff's Catint
(可能是32位),而 Qt::Key 中的第一个值是Qt::Key_Escape = 0x01000000
。更好的做法是在std::set<int>
中记住按下的键,然后在keyReleaseEvent()
中将其删除。 - Scheff's Catstd::unordered_map<int, bool> isKeyPressed;
对我来说是有效的,但为什么我没有收到 SIGSEGV 信号? - yomol777