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

我希望能在任何时候都能检查是否有按键被按下。我想象了这样一个解决方案。

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,即使我按这个右方向键或其他键。

EDIT:

一个头文件:

...
bool isKeyPressed[255];
...

其中一个链接文件

...
extern bool isKeyPressed[255];
...

我也不知道到底有多大 isKeyPressed 应该是,但我没有得到SIGSEGV,所以大小可能是确定的。

1
投票

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

如果你有兴趣 "捕捉 "一些按键被按下的事件,那么Qt提供了一些方法来解决这个问题。

你可以做的是将快捷方式 "连接 "到一个lambda或槽中,然后在里面做任何你需要的事情......比如当用户按 "control + i "时,就可以捕捉到。

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

你可以用map代替数组,如果你对顺序不感兴趣,那么你可以用unordered_maps,这样更快。有相当少的键,所以我认为无论如何程序会运行得很快。