QT中文输入法状态下获取键盘输入事件

时间:2022-08-23 08:57:50

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:
 
caseQt::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:
         case
Qt::Key_9:
 
caseQt::Key_Backspace:
break;
default :
             break ;
}
}
else if(QEvent:: InputMethod== ev->type())
{
//中文输入法状态下
QInputMethodEvent *keyEvent =
dynamic_cast<QInputMethodEvent
*
>(ev);
 
QString strInput =keyEvent->commitString();
//此时的strInput就是键盘上按键
}
return true;
}