我正在使用
event->key()== Qt::Key_Down
使用Qt中的箭头键控制和对象。 我对所有的箭头键(右,左,上,下)都有相同的功能,但发生的事情是非常严格的。喜欢向右和向下走,你必须按右箭头键然后松开它,然后按向下箭头键。而我希望用户能够对这两者进行预处理,并让它以这种方式重新定位。我试过这个但是没有用。
else if(event->key()== Qt::Key_Down && event->key()== Qt::Key_Right ){
setPos(x()+10,y()+10);
}
答案 0 :(得分:1)
与大多数事件处理程序一样,Qt只会告诉您何时按下某个键,并将所有按键放入队列中。因此,如果Qt :: Key_Down和Qt :: Key_Right将被一个接一个地处理,那么永远不会调用带有&&
的代码作为按键。
你想要的是一个检查按键是否被按住的功能,即如果按住左键然后向左移动,如果向下按住则向下按下,如果两个都被按下则向左下方按下。 / p>
Qt对此没有任何作用。其他人推荐了os特定解决方案,例如使用windows.h
和#ifdefs
。
看看这个问题: Check if a Key is Down with Qt
祝你好运!答案 1 :(得分:0)
您可以将按键添加到按键组中,并在释放按键时从该组中删除。因此,将按下的键添加到QSet
这是一个类成员:
QSet<int> pressedKeys;
您的事件过滤器就像:
bool MyWidget::eventFilter(QObject * obj, QEvent * event)
{
if(event->type()==QEvent::KeyPress) {
pressedKeys += ((QKeyEvent*)event)->key();
f( pressedKeys.contains(Qt::Key_Down) && pressedKeys.contains(Key_Right) )
{
setPos(x()+10,y()+10);
}
}
else if(event->type()==QEvent::KeyRelease)
{
pressedKeys -= ((QKeyEvent*)event)->key();
}
return false;
}