cpp
void Widget::keyPressEvent(QKeyEvent *event)
{
QPoint pt=ui->pushButton->pos();
if((event->key()==Qt::Key_A)||(event->key()==Qt::Key_Left))
ui->pushButton->move(pt.x()-20,pt.y());
else if((event->key()==Qt::Key_D)||(event->key()==Qt::Key_Right))
ui->pushButton->move(pt.x()+20,pt.y());
else if((event->key()==Qt::Key_W)||(event->key()==Qt::Key_Up))
ui->pushButton->move(pt.x(),pt.y()-20);
else if((event->key()==Qt::Key_S)||(event->key()==Qt::Key_Down))
ui->pushButton->move(pt.x(),pt.y()+20);
event->accept(); //接受事件,不会再传回到父容器中
}
**上述代码片段是控制窗口中pushButton按钮实现上下左右移动的功能;即,当按下键盘中的W、S、A、D或者↑、↓、←、→键时,pushButton按钮可以随之进行位置变化;运行时发现,按下W、S、A、D可以实现所需功能,而按下↑、↓、←、→键时,按钮没有反应;**这是由于没有捕捉到↑、↓、←、→键按下的操作;
解决方法:
在构造函数中添加函数grabKeyboard();从而实现对全按键按下操作的捕获;
cpp
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
grabKeyboard(); //这样就会捕获键盘中所有的操作,上下左右按钮均可以捕获到
}
解决后的效果图: