QT嵌入式软键盘(基于谷歌拼音源码、多平台)
- 一、序章
- 二、实现原理
- 三、实现效果
- 四、总结
- 五、末章
- 六、感谢
一、序章
基于Qt实现的虚拟键盘实现输入法在网上所有资料看来,大部分人都使用中文字库或数据库来实现输入法,而且制作的输入法要调用也只能在本工程窗口调用或者在新工程将输入法作为子目录接入,不够灵活也不够智能。
二、实现原理
我们采用的安卓底层的谷歌拼音输入法,在Qt5.7之后,Qt官方也出了一款输入法(支持中文拼音输入),但是是基于QML设计的,我们拿到其源码发现,其中的拼音输入法实现也是拿了安卓底层的谷歌拼音。
一定要记住:在有轮子的情况下,我们千万不要自己造轮子,除非迫不得已。我们把源码剥离出来,C++实现的,Qt官方稍微修改了几行代码,可以直接用在Qt上。我们单独把谷歌拼音输入法编译成静态库,到时候实现软键盘的时候直接链接进去。
//链接谷歌源码
//(我工程的easyInput.pir)
HEADERS += $$PWD/easyinput.h \
$$PWD/googlepinyin.h \
$$PWD/googlepinyin/atomdictbase.h \
$$PWD/googlepinyin/dictbuilder.h \
$$PWD/googlepinyin/dictdef.h \
$$PWD/googlepinyin/dictlist.h \
$$PWD/googlepinyin/dicttrie.h \
$$PWD/googlepinyin/lpicache.h \
$$PWD/googlepinyin/matrixsearch.h \
$$PWD/googlepinyin/mystdlib.h \
$$PWD/googlepinyin/ngram.h \
$$PWD/googlepinyin/pinyinime.h \
$$PWD/googlepinyin/searchutility.h \
$$PWD/googlepinyin/spellingtable.h \
$$PWD/googlepinyin/spellingtrie.h \
$$PWD/googlepinyin/splparser.h \
$$PWD/googlepinyin/sync.h \
$$PWD/googlepinyin/userdict.h \
$$PWD/googlepinyin/utf16char.h \
$$PWD/googlepinyin/utf16reader.h \
SOURCES += \
$$PWD/googlepinyin.cpp \
$$PWD/googlepinyin/dictbuilder.cpp \
$$PWD/googlepinyin/dictlist.cpp \
$$PWD/googlepinyin/dicttrie.cpp \
$$PWD/googlepinyin/lpicache.cpp \
$$PWD/googlepinyin/matrixsearch.cpp \
$$PWD/googlepinyin/mystdlib.cpp \
$$PWD/googlepinyin/ngram.cpp \
$$PWD/googlepinyin/pinyinime.cpp \
$$PWD/googlepinyin/searchutility.cpp \
$$PWD/googlepinyin/spellingtable.cpp \
$$PWD/googlepinyin/spellingtrie.cpp \
$$PWD/googlepinyin/splparser.cpp \
$$PWD/googlepinyin/sync.cpp \
$$PWD/googlepinyin/userdict.cpp \
$$PWD/googlepinyin/utf16char.cpp \
$$PWD/googlepinyin/utf16reader.cpp \
INCLUDEPATH += $$PWD
INCLUDEPATH += $$PWD/googlepinyin
//QT实现界面基础功能及样式(qss)
对外提供的接口在谷歌源码的pinyinime.h文件里面。
需加载dict_pinyin.dat和dict_pinyin_user.dat两个文件。
//新创test工程链接DLL动态库
完成输入法功能后,接下来就是要将输入法做成插件生成DLL动态库,这样其他工程在调用输入法时,只需加载DLL动态库就可以将输入法调用。当然输入法自适应和嵌入当前窗口需要在输入法功能里就做好。
//这是我的工程目录
三、实现效果
四、总结
1、不要重复造轮子。
2、多看大佬的QTCN文章代码。
3、学习使用输入法插件的模板工程。
4、学习谷歌拼音输入法的使用。
五、末章
基于谷歌拼音源码QT嵌入式软键盘(多平台),以插件形式打包、通过加载DLL库调用,可多平台移植,注释清晰明了,源码工整,可供嵌入式开发新手参考学习。软键盘自适应当前嵌入窗口大小,自行检测当前窗口输入框焦点及点击来触发软键盘显示,可移植arm(本人已移植测试成功),有条件的可以自行研究加入手写、语音等功能。
六、感谢
感谢QTCN上的各位大神
感谢全球最大的同性交友网站GitHub