Qt自己编写keyboad虚拟键盘

由于项目中有需要用到虚拟键盘,首先想到的是系统自带的,笔者是Ubuntu16+Qt5.9。

1.系统虚拟键盘的优缺点:

优点:直接可以脚本调起,功能完善,稳定。外观完美。

缺点:定制麻烦(详情看onboard帮助文档,英文),要想像手机那样用时自动显示,不用时自动隐藏,需要先设置系统的输入法,而且需要GNome的辅助功能支持。Qt自己编写keyboad虚拟键盘_第1张图片

2.Qt5已经有自带输入法了。Qt安装的时候就有一个virtualkeyboard选项,安装即可,编译生成完了,会在安装目录的plugins/plaforminputcontexts目录下。

优点:美观,方便,功能完善,跨平台,支持中文

缺点:定制的话在于改源代码的能力了,这是一个基于qml开发的插件,所以如果是widget使用的话需要用qquickwidget组件包装才能正常调出键盘。

Qt自己编写keyboad虚拟键盘_第2张图片

3.自己写一个plaforminputcontextsplugin

这个呢,非常感谢下面两篇连接的作者,链接如下:

QT5的软键盘实现...

QT之全平台虚拟键盘...

优点:能实现简单定制键盘,可以了解并学习Qt插件开发规则

缺点:该input插件依赖DBus通信,而windows对DBus支持有很多问题要解决,

           所幸Ubuntu是没问题的(好像搜狗的拼音,也是有开发Qt插件的,在linux平台的Qtcreator支持上,否则搜狗也是不能用于QtCreator的中文输入)源代码链接

Qt自己编写keyboad虚拟键盘_第3张图片

4.在3的基础上自己封装定制dll

在应用程序中添加本地库到当前工程,在pro文件中加以下类似代码:

LIBS += -L$$OUT_PWD/../keyboard/debug/ -lkeyboard

然后在主程序中调用即可

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    Keyboard objKeyboard;//创建对象
    objKeyboard.showDigital();//显示数字键盘

    MainWindow w;
    w.show();

    return a.exec();
}

优点:自由定制,重复利用,跨平台。最后上个效果图。

Qt自己编写keyboad虚拟键盘_第4张图片

你可能感兴趣的:(QT)