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。键很少,所以我认为该程序无论如何都会 运行 快。
我希望能够随时检查是否按下了键。我想象这样一个解决方案:
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。键很少,所以我认为该程序无论如何都会 运行 快。