3

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

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

4

2 回答 2

3

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

如果您有兴趣“捕捉”一些按键事件,那么 Qt 提供了方法来做到这一点

您可以做的是将快捷方式“连接”到 lambda 或插槽,并在其中执行您需要的任何操作......例如当用户按下“control + i”时捕捉

connect(new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_I), this), &QShortcut::activated, [](){qDebug() << "Here we are!";});
于 2020-05-06T10:51:39.700 回答
0

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

于 2020-05-06T12:21:55.823 回答