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 @ 2022-05-16 11:05  萧海~  阅读(765)  评论(0编辑  收藏  举报