开发过程中,查阅大量关于虚拟键盘的使用,其中最容易的是使用Qt自带的输入法,但是此法受制于人。其做法

int main(int argc, char *argv[])
{
    // 环境
    qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
    QApplication a(argc, argv);
    ......
    return a.exec();
}

但是,关于其背后的实现是挺曲折的,这涉及到Qt插件开发,动静态库的使用。

Qt自带输入法剖析

Qt-虚拟键盘

以Qt自带虚拟键盘为例,

使用时:当app中,qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard")),Qt即为我们依据key创建插件,当焦点改变时,即出现或隐藏我们的输入法。Qt自带代码结构:

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")

关于界面逻辑也做了修改,对英文输入不做单词拼写检查。

 

相关文章: