标题:Qt/C++中英输入法/嵌入式输入法/小数字面板/简繁切换/特殊字符/支持Qt456
作者:liudianwu
日期:2024-01-16 08:54
内容:
## 一、前言
在嵌入式板子上由于没有系统层面的输入法支持,所以都绕不开一个问题,那就是在需要输入的UI软件中,必须提供一个输入法来进行输入,大概从Qt5.7开始官方提供了输入法的源码,作为插件的形式加入到Qt中,这里需要特别提示的是,该源码是gpl的,商业应用对这个比较不感冒,可能更愿意自己基于Qt来实现一个。用纯Qt写输入法,如果不涉及到中文输入,那还是非常简单的,只需要将按钮上的字符用键盘事件发给焦点的控件即可。如果需要中文输入,最简单的做法是通过查询字库数据库来获取当前拼音对应的汉字,然后模拟键盘事件发送给焦点控件,好处是代码简单思路简单,缺点是性能堪忧,字库体积大,查询效率低,需要全拼才能找到合适的词语。复杂点的做法就是用谷歌开源的输入法引擎,查阅Qt自己的输入法源码,也是用的那个引擎,new出类,然后调用里面的函数接口,会返回对应的汉字,性能非常好。
谷歌开源的输入法引擎是标准的C++写的,所以可以非常方便的支持Qt4到Qt6,就不会局限于只能Qt5.7以后,输入法面板自己编写自己控制,自由度高,同时还可以加入简体繁体切换,特殊字符面板切换。其实可以复用很多按钮,比如在特殊字符这块,特殊字符往往一个面板不够放,可能要至少3个面板才能涵盖大部分的特殊字符,所有专门放了个特殊字符的面板按钮集合,通过翻页切换特殊字符,将对应的特殊字符文本设置到对应的按钮上,按钮单击后,识别按钮上的文本,然后再模拟键盘事件发送给焦点的控件即可。根据此思路其实可以拓展成多国语言输入法,根据大致的观察,多国语言基本上就是一些类似特殊字符的文本,将那些文本作为数据插入到焦点控件即可。
## 二、功能特点
1. 纯QWidget编写,原创输入法机制,没有任何第三方动态库的依赖。
2. 支持各种Qt版本,包括Qt4、Qt5、Qt6及后续版本。
3. 支持各种编译器,包括mingw、msvc、gcc、clang、wasm等。
4. 支持各种目标平台,包括windows、linux、macos、android、嵌入式linux等。
5. 支持任意控件输入,包括文本框、微调框、可编辑下拉框、表格行等,以及网页中的输入控件。
6. 支持中文、英文、数字、繁体、特殊字符、字母大小写等输入,可以自由切换。
7. 无需更改原有项目代码,不用任何额外代码,自动识别需要输入的控件,弹出输入法面板,不需要输入法代码写得到处都是。
8. 使用极为方便,通过源码集成到对应项目,源码是一个pri组件,只要在项目的pro文件引入即可。
9. 接口极其丰富,在众多 ..
#1 [alexnut 07-10 10:41]
大佬,请问输入法是没有开源吗?github找不到