Qt/C++中英输入法/嵌入式输入法/小数字面板/简繁切换/特殊字符/支持Qt456
一、前言
在嵌入式板子上由于没有系统层面的输入法支持,所以都绕不开一个问题,那就是在需要输入的UI软件中,必须提供一个输入法来进行输入,大概从Qt5.7开始官方提供了输入法的源码,作为插件的形式加入到Qt中,这里需要特别提示的是,该源码是gpl的,商业应用对这个比较不感冒,可能更愿意自己基于Qt来实现一个。用纯Qt写输入法,如果不涉及到中文输入,那还是非常简单的,只需要将按钮上的字符用键盘事件发给焦点的控件即可。如果需要中文输入,最简单的做法是通过查询字库数据库来获取当前拼音对应的汉字,然后模拟键盘事件发送给焦点控件,好处是代码简单思路简单,缺点是性能堪忧,字库体积大,查询效率低,需要全拼才能找到合适的词语。复杂点的做法就是用谷歌开源的输入法引擎,查阅Qt自己的输入法源码,也是用的那个引擎,new出类,然后调用里面的函数接口,会返回对应的汉字,性能非常好。
谷歌开源的输入法引擎是标准的C++写的,所以可以非常方便的支持Qt4到Qt6,就不会局限于只能Qt5.7以后,输入法面板自己编写自己控制,自由度高,同时还可以加入简体繁体切换,特殊字符面板切换。其实可以复用很多按钮,比如在特殊字符这块,特殊字符往往一个面板不够放,可能要至少3个面板才能涵盖大部分的特殊字符,所有专门放了个特殊字符的面板按钮集合,通过翻页切换特殊字符,将对应的特殊字符文本设置到对应的按钮上,按钮单击后,识别按钮上的文本,然后再模拟键盘事件发送给焦点的控件即可。根据此思路其实可以拓展成多国语言输入法,根据大致的观察,多国语言基本上就是一些类似特殊字符的文本,将那些文本作为数据插入到焦点控件即可。
二、功能特点
- 纯QWidget编写,原创输入法机制,没有任何第三方动态库的依赖。
- 支持各种Qt版本,包括Qt4、Qt5、Qt6及后续版本。
- 支持各种编译器,包括mingw、msvc、gcc、clang、wasm等。
- 支持各种目标平台,包括windows、linux、macos、android、嵌入式linux等。
- 支持任意控件输入,包括文本框、微调框、可编辑下拉框、表格行等,以及网页中的输入控件。
- 支持中文、英文、数字、繁体、特殊字符、字母大小写等输入,可以自由切换。
- 无需更改原有项目代码,不用任何额外代码,自动识别需要输入的控件,弹出输入法面板,不需要输入法代码写得到处都是。
- 使用极为方便,通过源码集成到对应项目,源码是一个pri组件,只要在项目的pro文件引入即可。
- 接口极其丰富,在众多输入应用场景中不断迭代完善至今。
- 界面清晰简洁,UI美观友好,高仿IOS输入法,非常适合触摸设备。
- 顶部单行文字面板和弹出多行多列文字面板选词,支持滑动选词。
- 具有词汇记忆功能,之前选中过的词语放到候选词最前面。
- 具有自由造词功能,可以直接打开词汇文件写入自定义词组,最高级别显示。
- 造词支持单个拼音多个汉字,自动调整优先级。
- 内置数字小键盘,在微调框这种只需要输入数字的地方,自动弹出数字小键盘,更美观。
- 可通过设置弱属性,控制是弹出全键盘的数字面板还是数字小键盘。
- 可设置回车后自动隐藏输入法面板还是要执行插入回车换行符。
- 可对部分不需要输入的输入框设置禁用输入法。
- 多版面字符页面,可以自行拓展各种字符展示,可用于多语言输入。
- 输入法面板尺寸自由设置,采用布局自适应任何分辨率,同时适用于一些小分辨率的设备。
- 输入法面板位置支持控件正下方/正上方、永远居中、底部拉伸填充等多种方式。
- 界面自适应屏幕大小,输入法弹出位置为控件底部时,当超过桌面右边或者底部时,自动调整位置。
- 支持Qt程序嵌入的浏览器中的网页中的文本框等控件的输入。
- 可以分别设置面板按键字体大小、候选词字体大小、图标尺寸、顶部高度等。
- 属性控制数字输入,例如需要文本框默认弹出的是数字面板,则设置代码 ui->lineEdit->setProperty("flag", "number")。
- 属性控制大写输入,例如需要文本框默认输入字母永远大写,则设置代码 ui->lineEdit->setProperty("upper", true)。
- 自由控制需要显示输入法和不需要显示输入法,当某些控件不需要弹出输入法,只需要对应不需要弹出输入法的控件设置属性noinput为真即可。例如ui->lineEdit->setProperty("noinput", true)。
- 实现了长按超过500毫秒重复执行按下的键的功能。例如长按退格键,不断删除。
- 支持单拼、全拼、模糊拼音输入,智能分页算法,可任意翻页查看汉字词组。
- 默认自带5种皮肤颜色,可通过代码设置皮肤样式,用户也可用QSS自定义皮肤。
- 谷歌内核的输入法引擎,品质保证,字库文件1MB,不依赖数据库,资源占用低效率极高。支持模糊拼音,比如nh=你好。
- 可选windows专有版本,支持外部程序输入,比如输入到记事本、QQ聊天窗口等。
- 可选硬键盘同步输入版本,外接实体键盘,类似搜狗输入法弹出小的候选词面板,可以快捷键切换输入法状态。
- 整个输入法核心代码行数1000行左右,非常小,不会对程序体积造成负担。
- 代码结构极为清晰,注释详细,非常容易阅读和理解,可自行修改和拓展满足各种需求。
三、代码使用
- 将core_input2019和core_pinyin整个目录放到你的项目的pro同一级别目录中。
- 在你的主程序的pro文件中加一行 include($$PWD/core_input2019/core_input2019.pri)
- 在你的程序的main函数中引入头文件 #include "core_input2019/frminput2019.h"
- 在你的程序的main函数中加几行代码。
QApplication a(argc, argv);
frmInput2019::Instance()->hide();
frmInput2019::Instance()->setFontInfo("MicroSoft Yahei", 18, 16);
frmInput2019::Instance()->setFixedSize2(650, 310);
frmInput2019::Instance()->setIconSize(26, 26);
frmInput2019::Instance()->setTopHeight(60);
QWidget w;
w.show();
return a.exec();
- 将源码下的inputfile文件夹下所有文件(即字库文件)复制到可执行文件同一目录。
- 详细的输入法函数接口使用参见main.cpp和frminputtool.cpp以及frmInput2019.h头文件中的接口,都有详细注释说明。
四、效果图


五、体验地址
- 体验地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取码:o05q 文件名:bin_input.zip
- 国内站点:https://gitee.com/feiyangqingyun
- 国际站点:https://github.com/feiyangqingyun
- 个人主页:https://blog.csdn.net/feiyangqingyun
- 视频主页:https://space.bilibili.com/687803542/
Qt/C++中英输入法/嵌入式输入法/小数字面板/简繁切换/特殊字符/支持Qt456的更多相关文章
- QT国际化(中英转换)
转载:https://blog.csdn.net/u012528526/article/details/54707233 QT国际化(中英转换) 我们都知道在安卓中,想做国际化很简单,只需要建立对应的 ...
- 安装完Linux Mint后,发现系统中竟没有中文输入法
安装完Linux Mint后,发现系统中竟没有中文输入法,语言支持之后自动更新过程中有些安装包下载失败. 可以采取下面的方法安装上中文输入法. 1. 安装iBus: sudo add-apt-repo ...
- Qt5的插件机制(1)--Qt 框架中的插件载入机制概述
概述 Qt的源代码中通过 Q<pluginType>Factory.Q<pluginType>Plugin 和 Q<pluginType> 这三个类实现了Qt的插件 ...
- Win10 改为用 Ctrl+Shift 切换中英输入语言而不是 Win+空格
是切换中英输入语言,而不是切换输入法,如图: 步骤: 设置 > 设备 > 输入 > 高级键盘设置 > 语言栏选项 > 高级键盘设置 > 更改按键顺序 > 切换 ...
- [转]从普通DLL中导出C++类 – dllexport和dllimport的使用方法(中英对照、附注解)
这几天写几个小程序练手,在准备将一个类导出时,发现还真不知道如果不用MFC的扩展DLL,是怎么导出的.但我知道dllexport可以导出函数和变量,而且MFC扩展DLL就算是使用了MFC的功能,但 ...
- Qt组件中的双缓冲无闪烁绘图
双缓冲绘图在Qt4中,所有的窗口部件默认都使用双缓冲进行绘图.使用双缓冲,可以减轻绘制的闪烁感.在有些情况下,用户要关闭双缓冲,自己管理绘图.下面的语句设置了窗口部件的Qt::WA_PaintOn ...
- 自定义的插件如何加载到Qt Designer中(详细)
要想在Qt Designer中使用自定义控件,必须要使Qt Designer能够知道我们的自定义控件的存在.有两种方法可以把新自定义控件的信息通知给Qt Designer:“升级(promotion) ...
- Qt 5中信号和槽的新语法
QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT ...
- webstorm快捷键 webstorm keymap内置快捷键英文翻译、中英对照说明
20160114参考网络上的快捷键,整理自己常用的: 查找/代替shift+shift 快速搜索所有文件,简便ctrl+shift+N 通过文件名快速查找工程内的文件(必记)ctrl+shift+al ...
- 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第一周测验【中英】
[吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第一周测验[中英] 第一周测验 - 深度学习简介 和“AI是新电力”相类似的说法是什么? [ ]AI为我们的家庭和办公室的个人设备供电 ...
随机推荐
- 在 K8s 中快速部署使用 GitLab 并构建 DevOps 项目
作者:张海立,KubeSphere 社区 Ambassador.Talented Speaker,社区用户委员会上海站副站长 原文链接:https://kubesphere.com.cn/blogs/ ...
- jmeter-模拟带参数的请求与上传文件
请求参数照着前端请求的样式填即可: header带content: header不带content_type: 总结:上传文件时headers里面不能带content_type参数
- P3571 [POI2014] SUP-Supercomputer 题解
P3571「POI2014」SUP-Supercomputer 题解 一道 "较" 水的黑题 (可一开始苦思冥想还是不会). 本蒟蒻的第一篇黑题题解,求赞. 题意简化 给定一棵 \ ...
- 强化学习:塑造奖励(Shaping reward)
"塑造奖励"(Shaping reward)是一个主要用于行为心理学和强化学习领域的技术.它通过对目标行为或结果的逐步接近进行强化,逐渐通过奖励越来越接近目标的行为来"塑 ...
- dotnet core微服务框架Jimu ~ 会员注册微服务
提供会员注册服务,用户必须注册成会员才能享受应用提供的服务,如浏览和发布新闻, 但有些服务又需要指定角色的会员才能操作,如所有会员都可以浏览新闻,只有管理员(admin)角色的会员才可以发布新闻. 有 ...
- 一文彻底弄懂Spring Boot的启动过程
一,Spring Boot启动过程 1. 启动入口 Spring Boot 应用的启动入口通常是一个包含 @SpringBootApplication 注解的主类,并调用 SpringApplicat ...
- (1) Pytorch深度学习—数值处理
(1)Pytorch--数值处理 参考于李沐"动手学深度学习"系列以及网上各路大佬的博客资料,感谢大家的分享,如错改,如侵删. torch中的数值处理 数值处理是深度学习中极其重要 ...
- 内网 BitTorrent 下载环境搭建——基于 Transmission
背景 前段时间为公司的产品增加了磁力链.种子下载的能力,测试时发现网上搜到的热门种子,有时好用,有时不好用,不好用主要表现在:没速度.速度慢.速度不稳定.下载一部分后没速度等,严重拖累了测试工作.为此 ...
- 崖山数据库-监控运维平台-YCM 配置部署详解
准备工作:操作系统版本:[root@node10 ~]# uname -aLinux node10 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 ...
- lua获取请求参数以及在nginx.conf中使用
-- 获取请求路径 local request_uri = ngx.var.request_uri -- 从 header中取值 local token = ngx.req.get_headers() ...