QT中文输入法状态下获取键盘输入事件(转)
Published on 2022-05-16 11:05 in 分类: Qt with 萧海~
分类: Qt

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;
    }
    posted @   萧海~  阅读(848)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · 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详解
    点击右上角即可分享
    微信分享提示
    电磁波切换