我希望能够随时检查该键是否被按下。我想象这样的解决方案:
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...
如果您有兴趣“捕获”一些按键事件,那么 Qt 提供了方法来做到这一点
您可以做的是将快捷方式“连接”到 lambda 或插槽,然后在其中执行您需要的操作...例如当用户按下“control + i”时捕获
connect(new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_I), this), &QShortcut::activated, [](){qDebug() << "Here we are!";});
您可以使用地图代替数组,如果您对顺序不感兴趣,那么您可以使用更快的 unordered_maps 。按键相当少,所以我认为程序无论如何都会运行得很快。