Qt/C++中英输入法/嵌入式输入法/小数字面板/简繁切换/特殊字符/支持Qt456

一、前言

在嵌入式板子上由于没有系统层面的输入法支持,所以都绕不开一个问题,那就是在需要输入的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. 接口极其丰富,在众多输入应用场景中不断迭代完善至今。
  10. 界面清晰简洁,UI美观友好,高仿IOS输入法,非常适合触摸设备。
  11. 顶部单行文字面板和弹出多行多列文字面板选词,支持滑动选词。
  12. 具有词汇记忆功能,之前选中过的词语放到候选词最前面。
  13. 具有自由造词功能,可以直接打开词汇文件写入自定义词组,最高级别显示。
  14. 造词支持单个拼音多个汉字,自动调整优先级。
  15. 内置数字小键盘,在微调框这种只需要输入数字的地方,自动弹出数字小键盘,更美观。
  16. 可通过设置弱属性,控制是弹出全键盘的数字面板还是数字小键盘。
  17. 可设置回车后自动隐藏输入法面板还是要执行插入回车换行符。
  18. 可对部分不需要输入的输入框设置禁用输入法。
  19. 多版面字符页面,可以自行拓展各种字符展示,可用于多语言输入。
  20. 输入法面板尺寸自由设置,采用布局自适应任何分辨率,同时适用于一些小分辨率的设备。
  21. 输入法面板位置支持控件正下方/正上方、永远居中、底部拉伸填充等多种方式。
  22. 界面自适应屏幕大小,输入法弹出位置为控件底部时,当超过桌面右边或者底部时,自动调整位置。
  23. 支持Qt程序嵌入的浏览器中的网页中的文本框等控件的输入。
  24. 可以分别设置面板按键字体大小、候选词字体大小、图标尺寸、顶部高度等。
  25. 属性控制数字输入,例如需要文本框默认弹出的是数字面板,则设置代码 ui->lineEdit->setProperty(“flag”, “number”)。
  26. 属性控制大写输入,例如需要文本框默认输入字母永远大写,则设置代码 ui->lineEdit->setProperty(“upper”, true)。
  27. 自由控制需要显示输入法和不需要显示输入法,当某些控件不需要弹出输入法,只需要对应不需要弹出输入法的控件设置属性noinput为真即可。例如ui->lineEdit->setProperty(“noinput”, true)。
  28. 实现了长按超过500毫秒重复执行按下的键的功能。例如长按退格键,不断删除。
  29. 支持单拼、全拼、模糊拼音输入,智能分页算法,可任意翻页查看汉字词组。
  30. 默认自带5种皮肤颜色,可通过代码设置皮肤样式,用户也可用QSS自定义皮肤。
  31. 谷歌内核的输入法引擎,品质保证,字库文件1MB,不依赖数据库,资源占用低效率极高。支持模糊拼音,比如nh=你好。
  32. 可选windows专有版本,支持外部程序输入,比如输入到记事本、QQ聊天窗口等。
  33. 可选硬键盘同步输入版本,外接实体键盘,类似搜狗输入法弹出小的候选词面板,可以快捷键切换输入法状态。
  34. 整个输入法核心代码行数1000行左右,非常小,不会对程序体积造成负担。
  35. 代码结构极为清晰,注释详细,非常容易阅读和理解,可自行修改和拓展满足各种需求。

三、代码使用

  1. 将core_input2019和core_pinyin整个目录放到你的项目的pro同一级别目录中。
  2. 在你的主程序的pro文件中加一行 include($$PWD/core_input2019/core_input2019.pri)
  3. 在你的程序的main函数中引入头文件 #include “core_input2019/frminput2019.h”
  4. 在你的程序的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();
  1. 将源码下的inputfile文件夹下所有文件(即字库文件)复制到可执行文件同一目录。
  2. 详细的输入法函数接口使用参见main.cpp和frminputtool.cpp以及frmInput2019.h头文件中的接口,都有详细注释说明。

四、效果图

在这里插入图片描述
在这里插入图片描述

五、体验地址

  1. 体验地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取码:o05q 文件名:bin_input.zip
  2. 国内站点:https://gitee.com/feiyangqingyun
  3. 国际站点:https://github.com/feiyangqingyun
  4. 个人主页:https://blog.csdn.net/feiyangqingyun
  5. 视频主页:https://space.bilibili.com/687803542/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/415810.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【docker】安装 CentOS

查看可用的 CentOS版本 docker search centOS拉取 CentOS最新镜像 docker pull centos:latest 查看本地镜像 docker images运行容器 docker run -itd --name centos-demo centos查看进程 docker ps进入centos容器 docker exec -it centos-demo /bin/bash停止容器 docker …

Autosar信息安全入门系列01-SecOC基础介绍

本文框架 1. 概述2. SecOC基本概念2.1 SecOC是什么?2.2 新鲜度值与MAC值2.3 SecOC报文格式 3. SecOC报文发送及接收逻辑3.1 SecOC报文的发送3.2 SecOC报文的接收 1. 概述 本文为Autosar通信入门系列介绍,如您对AutosarMCAL配置,通信&#xf…

C++编写、生成、调用so库详解(二)

我们上篇中主要讲了怎么去打包so库 C编写、生成、调用so库详解(一) 这篇我们就来说一些怎么调用so库 目录 1.调用符合JNI标准的so库 2.调用不符合JNI标准的so库 上面说了两种不同类型的so库,我们分别来看一下怎么调用这两种,在调用so库之前,我们先说一下直接调用上面写的C…

解决Uniapp插件市场试用原生插件项目 没有MD5签名安卓无法自定基座打包的情况

Uniapp插件市场中,有些插件是原生插件,必须使用自定义基座才能打包。但是传统keytool命令,已经无法看到安卓证书的MD5签名。现采用Android Studio查询signingReport的办法获取证书的MD5签名,并对插件的示例项目进行打包运行。一、…

烟火检测/周界入侵/视频智能识别AI智能分析网关V4如何配置ONVIF摄像机接入

AI边缘计算智能分析网关V4性能高、功耗低、检测速度快,易安装、易维护,硬件内置了近40种AI算法模型,支持对接入的视频图像进行人、车、物、行为等实时检测分析,上报识别结果,并能进行语音告警播放。算法可按需组合、按…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例4-5 select

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>select</title> </head><body> <!--单选下拉菜单可设置默认选中项--> 所在城市&#xff08;单选&#xff09;:<br> <select>…

广告灯的左移右移

1&#xff0e;  实验任务 做单一灯的左移右移&#xff0c;硬件电路如图4.4.1所示&#xff0c;八个发光二极管L1&#xff0d;L8分别接在单片机的P1.0&#xff0d;P1.7接口上&#xff0c;输出“0”时&#xff0c;发光二极管亮&#xff0c;开始时&#xff0c;P1.0→P1.1→P1.2→…

Oracle 数据库备份与恢复的重要性与最佳实践

文章目录 一、备份的重要性二、备份工具-RMAN四、比较备份策略五、实例恢复六、完全恢复与不完全恢复七、备份与恢复脚本 引言&#xff1a; 在现代信息时代&#xff0c;数据已成为组织和企业最重要的资产之一。保护和恢复数据的能力对于确保业务连续性和减少潜在风险至关重要。…

传感器产业链图谱及上中下游市场剖析(附产业链全景图)

传感器是一种通常由敏感元件和转换元件组成的检测装置&#xff0c;测量并感知信息后&#xff0c;通过变换让传感器中的数据或价值信息转换成电信号或其他所需形式的输出&#xff0c;以满足信息的传输、处理、存储、显示、记录和控制等要求。 传感器产业链包括上游原材料、生产设…

【LeetCode】202. 快乐数(简单)——代码随想录算法训练营Day06

题目链接&#xff1a;202. 快乐数 题目描述 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终…

CUDA tips

命令行查看核函数消耗的寄存器和共享内存数量 nvcc --ptxas-options-v reduce_sum.cu nvprof 使用 由于 8.0 及以上计算能力的显卡用不了 nvprof&#xff0c;官方建议用 nsight system 和 ncu&#xff0c;但是如果只想命令行打印表格查看 kernel 概况感觉还是 nvprof 方便&am…

[flutter]GIF速度极快问题的两种解决方法

原因&#xff1a; 当GIF图没有设置播放间隔时间时&#xff0c;电脑上会默认间隔0.1s&#xff0c;而flutter默认0s。 解决方法一&#xff1a; 将图片改为webp格式。 解决方法二&#xff1a; 为图片设置帧频率&#xff0c;添加播放间隔。例如可以使用GIF依赖组件设置每秒运行…