C++ Qt对来自键盘的按键的即时响应

C++ Qt对来自键盘的按键的即时响应,c++,qt,C++,Qt,我试图用键盘上的箭头键向左或向右移动一根棍子。下面的这段代码可以一步一步地完成,我的意思是,不管我是按住键盘上的左箭头还是只是点击它,棍子只移动5个单位。只要我拿着钥匙,我想做的就是移动它 bool handled = false; if ( e->type() == QEvent::KeyPress ) { QKeyEvent *keyEvent = (QKeyEvent *)e; if ( keyEvent->key() == Qt::Key_Left )

我试图用键盘上的箭头键向左或向右移动一根棍子。下面的这段代码可以一步一步地完成,我的意思是,不管我是按住键盘上的左箭头还是只是点击它,棍子只移动5个单位。只要我拿着钥匙,我想做的就是移动它

bool handled = false;
if ( e->type() == QEvent::KeyPress )
{
    QKeyEvent *keyEvent = (QKeyEvent *)e;

    if ( keyEvent->key() == Qt::Key_Left )
    {
        left= (= == 0 ? -5 : 0);
        handled = true;
    }
    else if ( keyEvent->key() == Qt::Key_Right )
    {
        right= (right== 0 ? 5 : 0);
        handled = true;
    }
}

我在QKeyEvent类中找不到一个方法可以实现我想做的事情。我如何解决这个问题?

为什么不使用QAction? 例如,捕捉左键按下:

    QAction *action = new QAction("test", this);
    action->setShortcut(QKeySequence("Left"));

    this->addAction(action);

    this->connect(action, SIGNAL(triggered()), this, SLOT(left_button_slot()));
还有一个插槽

void Widget::left_button_slot()
{
    //do whatever you want
    QMessageBox::information(this, "Hey", "You pressed left key !");
}

你为什么做
right=(right==0?5:0)?,您还可以解释您正在尝试,而不是您想要的和您在写作中看到的问题,这非常令人困惑。我认为您可以通过引入计时器来实现这一点。按键启动定时器,按键释放停止定时器。处理定时器的
timeout()
信号,使斗杆向左/向右移动,其次数与发出的
timeout()
信号的次数相同。能否显示更新后左右变量的处理方法?