杂
开发过程中,查阅大量关于虚拟键盘的使用,其中最容易的是使用Qt自带的输入法,但是此法受制于人。其做法
int main(int argc, char *argv[])
{
// 环境
qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
QApplication a(argc, argv);
......
return a.exec();
}
但是,关于其背后的实现是挺曲折的,这涉及到Qt插件开发,动静态库的使用。
Qt自带输入法剖析
以Qt自带虚拟键盘为例,
使用时:当app中,qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard")),Qt即为我们依据key创建插件,当焦点改变时,即出现或隐藏我们的输入法。Qt自带代码结构:
插件生成,
谷歌拼音:将字符处理生成汉子,最终静态库形式,这部分完全可以单独拽出来供自己使用
键盘ui:配合上静态库等,生成插件,dll最终于 \Qt\Qt5.10.0\5.10.0\编译器类型\plugins\platforminputcontexts\
插件接口:根据适用方设置的key,即qtvirtualkeyboard,创建插件接口
上下文:负责键盘ui的show、hide等
自我实现
主要可参照该博主输入法,特别感谢
对此,修改部分:
qt5softkeyboard工程pro文件:插件命名规则
TARGET = Qt5InputpluginSoftKeyBoard
platforminputcontextplugin.h
Q_PLUGIN_METADATA(IID QPlatformInputContextFactoryInterface_iid FILE "Qt5Input.json")
关于界面逻辑也做了修改,对英文输入不做单词拼写检查。