C++ Qt对来自键盘的按键的即时响应
我试图用键盘上的箭头键向左或向右移动一根棍子。下面的这段代码可以一步一步地完成,我的意思是,不管我是按住键盘上的左箭头还是只是点击它,棍子只移动5个单位。只要我拿着钥匙,我想做的就是移动它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 )
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()
信号的次数相同。能否显示更新后左右变量的处理方法?