当前位置: 首页 > news >正文

Ubuntu使用Qt虚拟键盘,支持中英文切换

前言

​最近领导给了个需求,希望将web嵌入到客户端里面,做一个客户端外壳,可以控制程序的启动、停止、重启,并且可以调出键盘在触摸屏上使用(我们的程序虽然是BS架构,但程序还是运行在本地工控机上的),我研究了一下qt的webengineview,成功将web嵌入到客户端里面,但是虚拟键盘这个问题却难住了我。

​首先客户端无法调出系统的虚拟键盘,我发现调系统键盘这条路走不通后,转头去研究qt官方自带的虚拟键盘,但是官方的虚拟键盘不支持拼音输入,而且自带了一大堆语言,我只需要中英文。想要修改必须改代码重新编译,当我好不容易改完代码编译完让键盘拼音输入可用的时候,部署到新机器上却出现了一大堆问题,各种依赖找不到。因为官方的虚拟键盘是基于qml的,部署较为复杂。然后我便从网上找到了一款基于qwidget的开源虚拟键盘,成功解决了问题。前前后后花了一个多礼拜时间进行探索,虽然最后解决问题时间比较短,但中间却走了很大一波弯路,在此我把解决方案分享出来,希望后人可以少踩点坑!

安装虚拟键盘

  1. 因为qt官方的虚拟键盘不支持拼音输入,想要支持拼音需要改源代码,并且安装部署较为麻烦,所以网上找了一款第三方的开源键盘,支持中英文输入

    下载地址:https://gitee.com/nkzhangkun/QVirtualKeyboard

    键盘效果样式图:

    在这里插入图片描述

  2. 下载源码后进行编译,先进入pinyin目录,建立build文件夹,编译生成libqtpinyind.a

    cd pinyin/
    mkdir build
    cd build/
    qmake ..
    make
    

    在这里插入图片描述

  3. 编译qt5softkeyboard,生成libQt5SoftKeyboard.so

    mkdir build
    cd build/
    qmake ..
    make
    

    在这里插入图片描述

  4. 将生成的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/
    

    在这里插入图片描述

  5. 在自己的qt应用程序添加虚拟键盘的环境变量

    qputenv("QT_IM_MODULE",QByteArray("Qt5Input"));
    

    在这里插入图片描述

修改虚拟键盘

  1. 虚拟键盘默认的大小有点过于大了,默认直接占据了半个屏幕,很多时候挡住了输入框,需要修改源码调整键盘大小。修改inputcontext.cpp文件里的相关内容,调整键盘高度,我这里将高度改为了300

    m_inputPanel->resize(1000, 300);
    

    在这里插入图片描述

  2. 修改完后重新编译,重新将生成的libQt5SoftKeyboardd.so放到qt的安装目录下

  3. 运行自己的程序看看效果,发现键盘高度已经缩小,没有挡住输入框

    在这里插入图片描述


http://www.mrgr.cn/news/64439.html

相关文章:

  • 从0开始学python-day17-数据结构2
  • LLM | 论文精读 | CVPR | SelTDA:将大型视觉语言模型应用于数据匮乏的视觉问答任务
  • selenium 点击元素报错element not interactable
  • 使用Cubic定制Ubuntu发行版
  • Flutter Color 大调整,需适配迁移,颜色不再是 0-255,而是 0-1.0,支持更大色域
  • 在Unity游戏开发在面试时会面试哪些内容?
  • 网鼎杯-re2-好久不见5
  • C语言 ——— 学习和使用 strstr 函数,并模拟实现
  • [Redis] Redis事务
  • 高频电子线路---一文读懂调幅
  • Ubuntu - 进入紧急模式,无法进入桌面
  • [RootersCTF2019]ImgXweb
  • Golang--DOS命令、变量、基本数据类型、标识符
  • 图文深入介绍Oracle DB link(二)
  • 【资调实习报告】华中农业大学资源调查与评价实习报告
  • 信息学奥赛一本通 1394:连接格点(grid)
  • R6:LSTM实现糖尿病探索与预测
  • 基于微信小程序的校园失物招领系统的研究与实现(V4.0)
  • 0-1规划的求解
  • Java 中 HashMap集合使用
  • wireshark抓包查看langchain的ChatOpenAI接口发送和接收的数据
  • next项目app router 中layout命名规范
  • ViT面试知识点
  • Google Guava 发布订阅模式/生产消费者模式 使用详情
  • SpringMVC的执行流程以及运行原理
  • 单链表OJ题(3):合并两个有序链表、链表分割、链表的回文结构