关于如何检测系统切换输入法的问题

加盾男爵 2018-01-03 09:22:17
win7+Qt5.7

现在需要知道用户切换输入法,当用户切换输入法时发射信号,目前试了两个方法都不行

方法1 重写窗体的输入法事件
void InputEdit::inputMethodEvent(QInputMethodEvent* event)
{
qDebug()<<"Input Method Changed";
emit inputMethodIsChanged();
QLineEdit::inputMethodEvent(event);
}

当Ctrl+空格切换输入法时(从英文切换至搜狗输入法)没有任何输出,然后开始用搜狗输入法输入中文,没按一个字母都会输出
Input Method Changed
再次用Ctrl+空格切换(从搜狗切换至英文)没有任何输出,然后用英文输入法输入英文,没有任何输出
但我需要用户切换输入法时发射信号,这里只有当用户切换至中文后,且开始输入是才开始发射信号,且是用户每按一个键就发射一次信号,和预期完全不一样

方法2在按键事件中检测Ctrl+Sheift组合键
代码差不多是这个样子
void InputEdit::keyPressEvent(QKeyEvent* event)
{
if (event->modifiers() == Qt::ControlModifier)
{
if (event->key() == Qt::Key_Shift || event->key() == Qt::Key_Space)
{
emit inputMethodIsChanged();
qDebug() << "Change Input Method";
}
}
QLineEdit::keyPressEvent(event);
}

但每次当我用Ctrl+Shift或者Ctrl+空格切换输入法时,总是输出几十行
lookupaccountname() failed. error 1332
没有其他输出,貌似没能检测到组合键

我想问下如何检测系统切换了输入法,或者说如何检测ctrl+Shift的组合键
...全文
514 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
砚昇 2018-01-08
  • 打赏
  • 举报
回复
如何解决的,可以分享一下吗?
加盾男爵 2018-01-08
  • 打赏
  • 举报
回复
问题解决了,来人接个分,我结下帖子
加盾男爵 2018-01-04
  • 打赏
  • 举报
回复
来人接分
http://www.mympc.org 输入法设置工具 IME TOOL 2.6.5 声明:IMETool 为免费软件,非商业使用无须授权,但不得对软件本身做任何修改。允许个人开发的免费输入法软件将其加入安装包使用,但安装包内不得包含有广告插件或流氓软件。 IME TOOL 支持中英文界面,适用于 Win98/ME/2000/XP/2003 操作系统。 主要功能: 一、动态调整输入法顺序而无须重启。 二、切换输入法指示器和高级文字服务方式。 三、任意设置输入法热键 Windows 本身的输入法热键设置功能限制很多,2000/XP 下更是如此,你不得不设置 ctrl+shift+3 这样的三键热键。IME Tool 让你可以自由地设置各种热键,基本键(ctrl、alt、shift)共有六种组合,辅助键有 91 个可选,如用左 Alt+左 Window 键激活龙文五笔,shift+down 激活紫光拼音。当然,有些热键组合是不能用的,如 shift+数字字母键。 四、注册表错误项目修正 1、自动删除输入法列表中不存在的输入法项目,位置: HKEY_CURRENT_USER\Keyboard Layout\preload 2、检查注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts 下的内容,如果某分支对应的输入法文件不存在,则删除此分支(需要管理员权限)。 3、自动删除输入法从列表中删除后可能遗留的激活热键设置,位置: HKEY_CURRENT_USER\Control Panel\Input Method\Hot Keys 五、输入法键盘定义功 能,适用于非英文键盘(需要管理员权限)。 六、安装删除输入法 IME TOOL 可以安装标准格式的输入法。自行复制 ime 和 mb 文件到系统目录中,然后使用 imetool 的安装输入法功能指定输入法名称和 ime 文件即可。 IME TOOL 可以从注册表中删除不需要的输入法,但并不删除文件。 七、其它功能 打开输入法属性、打开关闭输入法状态条等。支持命令行参数,支持运行脚本。 另外修正了老版本存在的一些小 bug。 局限: 1、在 Win9x 下设置的输入法热键不能立即生效,必须重启。在 Win95/NT 系统下有更多的功能限制。 注意: 1、用 IME Tool 设置的一些热键在 Windows 本身的输入法设置中会无法正确显示,但不影响使用。 2、繁体、韩文、日文系统下的打开关闭输入法切换键设置在注册表中的位置不同,因条件所限我没有做进一步测试功能是否有效。 3、在 IME Tool 中刚添加的输入法不能立即设置属性。 4、如果使用输入法指示器方式时,在系统目录下未发现 internat.exe 和 indicdll.dll 文件,将会自动复制当前目录下的此二文件过去(如果存在)。 命令行参数说明: /? /h /help 显示此帮助 /internat 输入法指示器风格 /ctfmon 高级文字服务风格 /status: : 关闭输入法状态条 : 显示输入法状态条 /caps 用 Caps 键关闭大写 /shift 用 Shift 键关闭大写 /switch: : 不使用切换语言和切换键盘布局热键 : 仅使用切换语言热键 : 仅使用切换键盘布局热键 : 同时使用切换语言和切换键盘布局热键 : 切换语言热键使用Ctrl+Shift : 切换键盘布局热键使用Ctrl+Shift /hotkey:,[hotkey] 指定输入法热键 ,指定第1、2、3.. 个输入法的热键 指定打开/关闭输入法的热键 指定全角/半角切换的热键 指定中英文标点切换的热键 如果留空则删除热键 [hotkey] 热键值,如:ctrl+space /add1:,[hotkey] 按名称添加输入法到列表 /add2:,[hotkey] 按文件名添加输入法到列表 /add3:,[hotkey] 按 ID 添加输入法到列表 /del1: 按顺序从列表中删除输入法 /del2: 按名称从列表中删除输入法 /del3: 按文件名从列表中删除输入法 /del4: 按 ID 从列表中删除输入法 /install:[name],,[hotkey] 安装输入法 /uninstall1: 按名称从注册表删除输入法 /uninstal

16,211

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧