Qt5软键盘实现中文拼音输入法

				版权声明:本文为博主原创文章,欢迎大家友好转载					https://blog.csdn.net/onlyshi/article/details/78408000				</div>
							<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css">
							            <div id="content_views" class="markdown_views">
						<!-- flowchart 箭头图标 勿删 -->
						<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path></svg>
						<h2 id="一序"><a name="t0"></a>一、序</h2>

基于Qt实现的虚拟键盘实现输入法在网上所有资料看来,几乎都是基于生成的中文汉字数据库实现的方法,不够灵活,不够智能。

二、实现

1、拼音输入法的库

我们采用的安卓底层的谷歌拼音输入法,在Qt5.7之后,Qt官方也出了一款输入法(支持中文拼音输入),但是是基于QML设计的,我们拿到其源码发现,其中的拼音输入法实现也是拿了安卓底层的谷歌拼音。

一定要记住:在有轮子的情况下,我们千万不要自己造轮子,除非迫不得已。我们把源码剥离出来,C++实现的,Qt官方稍微修改了几行代码,可以直接用在Qt上。我们单独把谷歌拼音输入法编译成静态库,到时候实现软键盘的时候直接链接进去。

googlepinyin.pro 
QT       -= gui
TARGET = googlepinyin
TEMPLATE = lib
CONFIG += staticlib
SOURCES += \
    dictbuilder.cpp \
    dictlist.cpp \
    dicttrie.cpp \
    lpicache.cpp \
    matrixsearch.cpp \
    mystdlib.cpp \
    ngram.cpp \
    pinyinime.cpp \
    searchutility.cpp \
    spellingtable.cpp \
    spellingtrie.cpp \
    splparser.cpp \
    sync.cpp \
    userdict.cpp \
    utf16char.cpp \
    utf16reader.cpp
HEADERS += \
    atomdictbase.h \
    dictbuilder.h \
    dictdef.h \
    dictlist.h \
    dicttrie.h \
    lpicache.h \
    matrixsearch.h \
    mystdlib.h \
    ngram.h \
    pinyinime.h \
    searchutility.h \
    spellingtable.h \
    spellingtrie.h \
    splparser.h \
    sync.h \
    userdict.h \
    utf16char.h \
    utf16reader.h

 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

工程源码在这里googlepinyin.7z,大家可以自行下载研究。对外提供的接口在pinyinime.h文件里面。

2、实现软件盘

先看一张实现的软件盘截图。
软件截图

软键盘插件实现框架网上资料很多,不做赘述。
我的源码工程目录如下:
源码工程目录

dict:存放最后要使用的二进制字典文件,此字典文件是谷歌拼音输入法根据最原始的汉字文件生成的,大家到时候直接使用就行了,不用深究此处。
font:存放图标字体,FontAwesome.otf。Font Awesome 是一款可缩放的矢量图标字库。相信很多人对这个感到陌生,请大家自行搜索FontAwesome,以及如何在Qt中运用FontAwesome。
images:按钮图片背景。
pinyin:刚才编译出来的谷歌拼音库和头文件。
googlepinyin.h,googlepinyin.cpp:谷歌拼音库的接口使用文件。
keyboardform.h,keyboardform.cpp:键盘布局文件。
keyeventdispacher.h,keyeventdispacher.cpp:键盘按键的事件处理文件。
inputcontext.,platforminputcontextplugin.,Qt5Input.json,virtualkeyborad_global.h:这几个文件不做赘述。
res.qrc:资源文件

工程文件中难点不多,不再对源码进行解释。

编译这个工程VritualKeyboard.7z,最后生成的是一个动态链接库,但是如何使用呢?

3、使用软键盘

  • 假设要使用输入法的程序是QtDemo.exe;
  • 在Qt5Demo.exe所在目录新建一个文件夹 platforminputcontexts (文件夹名称不可更改成其他),将 VirtualKeyboard.dll放入其中;
  • 将工程目录中 dict 整个文件夹复制到Qt5Demo.exe所在目录;
  • 最后运行QtDemo.exe 即可。
    测试目录

三、总结

1、不要重复造轮子。
2、在Qt的工程中使用Font Awesome图标字体。
3、学习使用输入法插件的模板工程。
4、学习谷歌拼音输入法的使用。

四、感谢

  1. 感谢QTCN上的各位大神
  2. 感谢全球最大的同性交友网站GitHub

完美收官

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值