QT中文输入法状态下获取键盘输入事件(转)
QT在中文输入法下,获取键盘的输入消息时,始终获取不到,但是在英文输入状态下是可以获取的,具体看代码:
bool mytest::eventFilter(QObject *obj, QEvent *ev) { if (QEvent::KeyPress == ev->type()) { QKeyEvent *keyEvent = dynamic_cast<QKeyEvent *>(ev); switch (keyEvent->key()) { case Qt::Key_0: case Qt::Key_1: case Qt::Key_2: case Qt::Key_3: case Qt::Key_4: case Qt::Key_5: case Qt::Key_6: case Qt::Key_7: case Qt::Key_8: case Qt::Key_9: case Qt::Key_Backspace: break; default: break; } } return true; }
上面的代码在获取英文输入状态下的键盘事件时,一点问题没有,但是切换到中文输入状态下就出问题了,后来调试发现,
在中文状态下,QEvent获取的类型为QEvent::InputMethod(83),具体原因还正在研究,如果哪位大牛知道原因,可以交流一下
此时如果想获取具体的输入键盘信息可以通过如下方式处理,代码:
bool mytest::eventFilter(QObject *obj, QEvent *ev) { if(QEvent::KeyPress == ev->type()) { //英文输入法状态下 QKeyEvent *keyEvent = dynamic_cast<QKeyEvent *>(ev); switch (keyEvent->key()) { case Qt::Key_0: case Qt::Key_1: case Qt::Key_2: case Qt::Key_3: case Qt::Key_4: case Qt::Key_5: case Qt::Key_6: case Qt::Key_7: case Qt::Key_8: caseQt::Key_9: case Qt::Key_Backspace: break; default: break ; } } else if(QEvent::InputMethod== ev->type()) { //中文输入法状态下 QInputMethodEvent *keyEvent = dynamic_cast<QInputMethodEvent *>(ev); QString strInput = keyEvent->commitString(); //此时的strInput就是键盘上按键 } return true; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2021-05-16 简单好用的Log类, easylogging++
2021-05-16 static的应用和作用
2021-05-16 TCP长连接和Keepalive详解