原文地址
前言
如果要在Qt
下实现软键盘的应用程序,在非嵌入式设备下就一行代码就可以处理了
qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
如果你希望自定义样式或者输入法,而你的嵌入式设备使用的是QML
前端框架,也比较相对比较简单,可以参考Resize qtvirtualkeyboard according to QObject,以及官网相关说明
但是如果你使用的纯Widgets
开发,而且又不希望混用QML
的话就会稍微麻烦点了
生成自定义的虚拟动态链接库
如果你有更好的解决方案,可以在下方评论区提出,或者联系站长,这里我们是通过修改开源QWidget
下virtualkeyboard
实现来处理这个问题的,相对来说比较简单,开源库地址
这个方案源码只支持Qt5
在Qt6
下使用需要自行修改源码,修改处并不算特别多,有Qt6
需求的按报错修改即可。使用步骤和他的文档中差不多,我这里仅作一些补充,大概说明一下源码主要文件以及修改方向
关于样式主要文件有KeyboardContainer
键盘容器,定义了主键盘的样式以及上方中文字符选择列表的样式,NormalKeyboard
定义了主键盘字符案件,没有特殊需求不必修改,SymbolKeyboard
同理,CandidatesListWidget
为中文选择列表类定义了一些样式和选择规则,InputContext
输入初始化类,这个容易被忽视,这个他重写了键盘容器的位置和大小,如果需要调整键盘容器的位置和大小需要在这里调整
修改完源码,然后就是编译生成动态链接库了,如果你在Linux
下打包生成的就是.so
文件,如果是在windows
下进行编译,生成就是.dll
文件。Windows
编译比较简单,直接点就行了,Linux
下需要跑编译命令/your/qt/path/qmake xxxx.pro && make
-
先编译
pinyin
,注意,他用的中文字符库应该是GB2312
的,对于中文字符的收录不全,就是我们xp
时代自带的打字法所包含的字符,如果有生僻字需求需要更换字符相关的资源文件 -
再编译
qt5softkeyboard
,将生成在bin/plugins/platforminputcontexts/
目录下的动态链接库拷贝到${YOUR_QT_DIR}/gcc/plugins/platforminputcontexts
-
最后在你的主程序中添加加载代码即可
qputenv("QT_IM_MODULE",QByteArray("Qt5Input"));