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:
case
Qt::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;
}