如何检查某个键是否被按下?

问题描述 投票:0回答:2

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

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
,所以尺寸可能还可以。

c++ qt keypress qt-events
2个回答
3
投票

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

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

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

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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.