QT如何检查按键是否被按下?

QT How to check if key is pressed?

我希望能够随时检查是否按下了键。我想象这样一个解决方案:

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,所以大小可能没问题。

你通常不会那样解决问题...至少不使用 QT...

如果您对 "catch" 一些按键事件感兴趣,那么 Qt 提供了实现这些的方法

你可以做的是 "connect" 到 lambda 或槽的快捷方式,然后在里面做你需要的任何事情......例如当用户按下 "control + i"

时捕获
connect(new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_I), this), &QShortcut::activated, [](){qDebug() << "Here we are!";});

您可以使用地图代替数组,如果您对顺序不感兴趣,则可以使用更快的 unordered_maps。键很少,所以我认为该程序无论如何都会 运行 快。