Qt中无法捕获键盘按下操作的解决方法

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();     //这样就会捕获键盘中所有的操作,上下左右按钮均可以捕获到
}

解决后的效果图:

相关推荐
爱学习的capoo6 分钟前
matlab自控仿真【第一弹】❀传递函数和输出时域表达式
开发语言·matlab
EverBule17 分钟前
Python 训练 day46
开发语言·python
蓝婷儿1 小时前
6个月Python学习计划 Day 18 - 项目实战 · 学生成绩管理系统(OOP版)
开发语言·python·学习
HINOTOR_2 小时前
DAY 25 异常处理
开发语言·python
yorushika_2 小时前
python打卡训练营打卡记录day49
开发语言·python·tensorboard·cbam
还是鼠鼠2 小时前
HTTP 请求协议简单介绍
java·开发语言·网络·网络协议·http
on the way 1232 小时前
行为设计模式之Command (命令)
java·开发语言·设计模式
恰薯条的屑海鸥2 小时前
关于我对各开发语言的看法与接下来的文章内容
开发语言·学习·微信小程序·网站开发·全栈开发
UP_Continue3 小时前
C++--string的模拟实现
java·开发语言·c++
键盘林4 小时前
分布式系统简述
java·开发语言