Qt中输入框在Win10上“Win+/“快捷键的一个Bug

Qt中输入框在Win10上"Win+/"的输入法Bug

最近项目测试中偶然发现Win10上使用微软输入法,按“Win + /”快捷键会导致UI假死或无法输入中文,Win11没有复现。猜测应该是微软中文输入法的Bug,测试了QQ输入法和日语输入法,都没有问题。

问题复现

Qt窗口放一个输入框,先输入几个字符,切换到微软输入法,按Win+/快捷键(有的版本可能直接卡死),然后继续输入中文,能看到拼音和候选词窗口,选择候选词没有效果。

微软官网上“Win+/”快捷键操作是“Begin IME reconversion”,网上也没有太多的资料,大概意思是说触发重新转换字符串,所有软件针对该快捷键,要么什么都不做,或者输入“/”,或者输入“、”。

解决办法(暂时)

拦截消息发现该快捷键会发送WM_IME_REQUEST消息,wParam值为IMR_RECONVERTSTRING,Qt内部是额外处理的。

尝试用QAbstractNativeEventFilter拦截一下,调用QApplication::installNativeEventFilter安装一个native消息的过滤器,直接忽略掉:

class NativeEventFilter: public QAbstractNativeEventFilter{
    
    
protected:
    bool nativeEventFilter(const QByteArray &eventType, void *message, qintptr *result){
    
    
        if(eventType == "windows_generic_MSG"){
    
    
            MSG * msg = static_cast<MSG *>(message);
            if(msg->message == WM_IME_REQUEST && msg->wParam == IMR_RECONVERTSTRING){
    
    
                * result = 0;
                return true;
            }
        }
        return false;
    }
};

似乎该方法也没有什么副作用

猜你喜欢

转载自blog.csdn.net/eiilpux17/article/details/122571064
今日推荐