我正在使用 Qt 4.6,我想对按住的多键组合(例如 Key_Q+Key_W)使用react。因此,当您按住组合键时,应该始终调用该事件,就像它处理单个键事件的方式一样。我尝试使用 QShortcuts 并为它们启用自动重复,但这没有用:
keyCombos_.push_back(new QShortcut(QKeySequence(Qt::Key_W, Qt::Key_D), this));
connect(keyCombos_[0], SIGNAL(activated()), SLOT(keySequenceEvent_WD()));
setShortcutAutoRepeat(keyCombos_[0]->id(), true);
当使用这种方法时,我也遇到了无法再捕捉单个 Key_W(或键序列中的第一个 Key 是什么)笔画的问题。
谢谢, 托马斯
最佳答案
您可以将按下的键添加到按下的键集中,并在释放键时从该集中删除。因此,您可以将按下的键添加到作为类成员的 QSet
中:
QSet<int> pressedKeys;
您可以在事件过滤器中捕获关键事件:
bool MyWidget::eventFilter(QObject * obj, QEvent * event)
{
if ( event->type() == QEvent::KeyPress ) {
pressedKeys += ((QKeyEvent*)event)->key();
if ( pressedKeys.contains(Qt::Key_D) && pressedKeys.contains(Qt::Key_W) )
{
// D and W are pressed
}
}
else if ( event->type() == QEvent::KeyRelease )
{
pressedKeys -= ((QKeyEvent*)event)->key();
}
return false;
}
不要忘记在构造函数中安装事件过滤器:
this->installEventFilter(this);
关于c++ - Qt多键组合事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3081091/