1. 为什么要在Qt5.6中移植VirtualKeyboard?
如果你正在用Qt5.6开发一个需要在触摸屏上输入的应用,比如工业平板、自助终端或者车载信息娱乐系统,那你很可能遇到过一个大麻烦:Qt5.6本身没有自带虚拟键盘。官方提供的 Qt VirtualKeyboard 插件是从Qt5.7版本才开始加入的。这意味着,当你点击一个输入框时,屏幕空空如也,用户没法输入任何文字,项目直接就卡壳了。
我当年就踩过这个坑。项目硬件已经定型,系统环境都是基于Qt5.6构建的,升级到更高版本的Qt牵一发而动全身,风险巨大。但用户需求很明确,必须要有中文输入。那时候找遍了网络,试过一些第三方软键盘,要么兼容性差,要么定制困难。最后发现,其实完全可以把高版本(比如Qt5.7)的VirtualKeyboard源码“移植”到Qt5.6环境中来使用。这听起来有点像是“时光倒流”,把未来的功能拿回过去用,但实操下来是条非常可行的路径。
简单来说,这个过程就是:获取高版本的虚拟键盘源码 -> 在Qt5.6环境下重新编译 -> 集成到你的应用程序中。这样做的好处是,你既享受了官方插件的稳定性和功能完整性(支持中英文切换、数字键盘、手写输入等),又无需升级整个Qt框架,最大程度保持现有项目的稳定性。接下来,我就把完整的移植、部署和优化经验,一步步分享给你。
2. 实战第一步:获取与编译VirtualKeyboard源码
万事开头难,但第一步走稳了,后面就顺了。我们的目标是把Qt5.7的VirtualKeyboard插件,在Qt5.6的环境里“复刻”出来。
2.1 下载正确的源码包
首先,你需要去Qt的官方归档站点下载Qt5.7的完整源码包。注意,是完整源码(single package),而不是已经编译好的安装包。下载地址通常是这样的结构:http://download.qt.io/archive/qt/5.7/5.7.0/single/qt-everywhere-opensource-src-5.7.0.tar.xz。下载完成后,解压这个巨大的压缩包。
我们需要的是其中的 qtvirtualkeyboard 模块。找到解压目录下的 qtvirtualkeyboard 文件夹,把它单独复制出来,放到一个干净的工作目录里,比如 D:/work/qtvirtualkeyboard-src。这就是我们移植工作的核心材料。
2.2 配置与编译:关键命令详解
进入你刚复制出来的 qtvirtualkeyboard 源码目录。接下来是关键的命令行操作。打开Qt5.6配套的“Qt 5.6 for Desktop”命令行工具(如果你用的是MinGW)或者配置好Qt5.6环境的终端。
首先,使用 qmake 生成编译所需的Makefile。这里有一个至关重要的参数,它决定了你的键盘支持哪些语言:
qmake -r CONFIG+="lang-en_GB lang-zh_CN"
我强烈建议你把上面这行命令复制粘贴运行。CONFIG+= 后面跟的是语言配置。lang-en_GB 是英式英语,lang-zh_CN 是简体中文。一定要带上双引号,并且确保 qmake 是来自你的Qt5.6环境。这个步骤如果失败,最常见的原因就是环境变量没设对,或者路径中有空格或中文。
执行成功后,当前目录会生成一堆Makefile文件。接下来就是编译:
- 在Windows(MinGW)下:运行
mingw32-make - 在Linux下:运行
make
这个过程可能需要几分钟,耐心等待。如果编译出错,请仔细查看错误信息。常见问题可能是缺少某些依赖库(比如OpenGL ES 2.0的开发文件),你需要根据提示安装对应的开发包。
编译成功后,进行安装:
- 在Windows(MinGW)下:运行
mingw32-make install - 在Linux下:运行
sudo make install
这个 install 操作,会把编译生成的插件库文件(libqtvirtualkeyboardplugin.so 或 .dll)和相关的QML模块文件,复制到你的 Qt5.6安装目录 的对应位置。例如,在Windows上,插件会安装到 C:\Qt\5.6\mingw49_32\plugins\platforminputcontexts\,QML模块会安装到 C:\Q


381

被折叠的 条评论
为什么被折叠?



