前言
最近领导给了个需求,希望将web嵌入到客户端里面,做一个客户端外壳,可以控制程序的启动、停止、重启,并且可以调出键盘在触摸屏上使用(我们的程序虽然是BS架构,但程序还是运行在本地工控机上的),我研究了一下qt的webengineview,成功将web嵌入到客户端里面,但是虚拟键盘这个问题却难住了我。
首先客户端无法调出系统的虚拟键盘,我发现调系统键盘这条路走不通后,转头去研究qt官方自带的虚拟键盘,但是官方的虚拟键盘不支持拼音输入,而且自带了一大堆语言,我只需要中英文。想要修改必须改代码重新编译,当我好不容易改完代码编译完让键盘拼音输入可用的时候,部署到新机器上却出现了一大堆问题,各种依赖找不到。因为官方的虚拟键盘是基于qml的,部署较为复杂。然后我便从网上找到了一款基于qwidget的开源虚拟键盘,成功解决了问题。前前后后花了一个多礼拜时间进行探索,虽然最后解决问题时间比较短,但中间却走了很大一波弯路,在此我把解决方案分享出来,希望后人可以少踩点坑!
安装虚拟键盘
-
因为qt官方的虚拟键盘不支持拼音输入,想要支持拼音需要改源代码,并且安装部署较为麻烦,所以网上找了一款第三方的开源键盘,支持中英文输入
下载地址:https://gitee.com/nkzhangkun/QVirtualKeyboard
键盘效果样式图:
-
下载源码后进行编译,先进入pinyin目录,建立build文件夹,编译生成libqtpinyind.a
cd pinyin/ mkdir build cd build/ qmake .. make
-
编译qt5softkeyboard,生成libQt5SoftKeyboard.so
mkdir build cd build/ qmake .. make
-
将生成的libQt5SoftKeyboardd.so放到qt的安装目录下,如果你是用apt直接安装的qt,那就是放到/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/目录下
sudo cp libQt5SoftKeyboard.so /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/
-
在自己的qt应用程序添加虚拟键盘的环境变量
qputenv("QT_IM_MODULE",QByteArray("Qt5Input"));
修改虚拟键盘
-
虚拟键盘默认的大小有点过于大了,默认直接占据了半个屏幕,很多时候挡住了输入框,需要修改源码调整键盘大小。修改inputcontext.cpp文件里的相关内容,调整键盘高度,我这里将高度改为了300
m_inputPanel->resize(1000, 300);
-
修改完后重新编译,重新将生成的libQt5SoftKeyboardd.so放到qt的安装目录下
-
运行自己的程序看看效果,发现键盘高度已经缩小,没有挡住输入框