QT按键判断和碰撞检测的有关问题,3Q

QT按键判断和碰撞检测的问题,紧急求助啊!!!3Q
在写贪吃蛇, 发现QT按键判断不对劲啊。。。
已经弄好过滤器那些了, 但是如果快速按←↓→的话 (或者其他按的很快的情况) 就会出现比如本来向右 然后直接掉头向左 本来向左 直接掉头向右的情况。。。。这是为什么呢?


还有碰撞检测第一次可以检测成功 接下去就再也检测不了了 这是为什么。。。。求助!!!~~~万分感谢


下面是按键过滤器的代码和按键事件的代码。。。


bool CONTROLLER::eventFilter(QObject *object, QEvent *event)
{
if (event->type() == QEvent::KeyPress) 
{ handleEvent((QKeyEvent *) event); 
return true; 

else 
return QObject::eventFilter(object, event);
}


void CONTROLLER::handleEvent(QKeyEvent *keyEvent)
{
switch (keyEvent->key()) 

case Qt::Key_Left: Snake->setDirection(LEFT); break; 
case Qt::Key_Right: Snake->setDirection(RIGHT); break; 
case Qt::Key_Up: Snake->setDirection(UP); break; 
case Qt::Key_Down: Snake->setDirection(DOWN); break; 
}
------解决方案--------------------
你现在这样实现,出现那样的动作也合理。
键盘按下这个动作,其实是把按下的键放入队列中,所以不管你按的多快,也是三个动作一个个触发键盘事件。
你需要的是这个按键的组合,对应一个执行动作,那么你可以记录三个键一起按下且按下的顺序对应时的时间,在指定的时间内,如200ms,则认为它是一个组合动作,而不是一个个来执行。
------解决方案--------------------
重写eventFilter()函数后,要在某些目标对象上installEventFilter安装事件过滤器。而且一个拥有焦点(focus)的QWidget才可以接受键盘事件,可以去Qt帮助文档里看看setFocusPolicy。