Qt自带虚拟键盘是5.7版本以上才有,要在Qt5.6上使用自带虚拟键盘需要先下载源码,再进行编译安装。上网查了一些资料都很有用。

https://doc.qt.io/qt-5/qtvirtualkeyboard-index.html,Qt官网对虚拟键盘的说明

https://www.freesion.com/article/4329858138/,说明如何编译安装部署虚拟键盘

https://blog.csdn.net/can3981132/article/details/119547195,说明desktop模式下如何更改虚拟键盘大小

https://www.coder.work/article/7472902,说明如何解决虚拟键盘关闭不了,关闭时主界面卡死

现将我自己的操作步骤总结如下:

1、去GitHub上下载Qt5.6版本的虚拟键盘源码。网址为:https://github.com/hanshuaipeng/QtInputMethod_GooglePinyin.git,在下拉框上选择Download Zip即可下载。

2、解压源码压缩包,进入目录qtvirtualkeyboard-5.6中,

(1)Windows下可以直接通过QtCreator编译,也可以在开始菜单中找到Qt 5.6 for Desktop,在其中输入指令进行编译;

(2)Linux下直接输入指令进行编译。

3、执行qmake -r CONFIG+="lang-en_GB lang-zh_CN"生成Makefile。

4、(1)Windows下执行mingw32-make进行编译,执行mingw32-make install进行安装。

   (2)Linux下执行make进行编译,执行sudo make install进行安装,其中可能会报错,需要具体分析,我的安装时提示类似“usr/share/qt5/qtvirtualkeyboard/pinyin/dict_pinyin.dat: �: not found”这种错误,可以忽略。

5、在我们开发的程序中打开main.cpp,在QApplication之前加上qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));

6、Windows下可以直接运行程序,当点击输入框时会自动弹出虚拟键盘。但是Linux需要部署一下。

(1)找到自己编译的Qt生成文件目录,如果不知道这个路径可以在make install的输出打印信息中找到;

(2)找到.../usr/lib/qt5/plugins,将其中的文件夹imageformats、platforminputcontexts和platforms拷贝到应用程序可执行文件同级目录中的plugins下;

(3)找到.../usr/lib/qt5/qml,将其中的文件夹Qt、QtGraphicalEffects、QtQml、QtQuick和QtQuick.2拷贝到应用程序可执行文件同级目录中的qml下;

(4)将文件夹.../share/qt5/qtvirtualkeyboard拷贝到应用程序可执行文件同级目录下。

注:按照上面部署我并没有起作用,将上面步骤中的应用程序可执行文件同级目录改为应用程序运行环境中的Qt库对应目录即可。其中已经存在这些目录,需要先删除再把编译好的拷贝过来。

7、在Linux下运行我的应用程序出现了两个问题:

(1)键盘太大,把输入框都挡住了,此时如果使用desktop模式的虚拟键盘,可以在源码中找到virtualkeyboard/src/virtualkeyboard/源文件/desktopinputpanel.cpp,改写其中的show函数,将其改为如下内容:

AppInputPanel::show();
    Q_D(DesktopInputPanel);
    if (d->view) {
        QRect rc = QGuiApplication::primaryScreen()->geometry();
        rc.moveTo(rc.width() / 6, rc.height() / 2);
        rc.setWidth(rc.width() * 2 / 3);
        rc.setHeight(rc.height() / 2);
        repositionView(rc);
        //repositionView(QGuiApplication::primaryScreen()->availableGeometry());
        d->view->show();
}
即可改变虚拟键盘大小。
(2)点击关闭键盘按键,键盘不关闭,且主界面被卡死。解决方法是不用desktop模式,改为将InputPanel嵌入到控件中的模式,例如,在输入控件所在qml中首先加入
import QtQuick.Enterprise.VirtualKeyboard 2.0
注意:对于Qt5.6版本是2.0,即使QtCreator编辑器暂时提示找不到该模块也可以先忽略,只要编译通过就没问题,然后在TextField下面加入
InputPanel {
            width: window.width
            y: window.height - height
            visible: active
        }
即可,如果还不行,那么将TextField外层再包上Rectangle或者Item。

Qt5.6使用Qt自带虚拟键盘的更多相关文章

  1. Qt5.14.2使用虚拟键盘

    说明 这是关于Qt5(Qt5.1.4.2),QWidget编程使用Qt虚拟键盘(qtvirtualkeyboard) Tag: QT5,Qt,软件盘.虚拟键盘,Widget程序,QML  作者:474 ...

  2. 【转】air调用windows自带的虚拟键盘

    原文:http://bbs.9ria.com/blog-73243-19560.html 最近在做一个东西,需要用到虚拟键盘.刚开始准备用as3开发一套,结果突然想起来windows有个自带的虚拟键盘 ...

  3. 【小贴士】虚拟键盘与fixed带给移动端的痛!

    前言 今天来公司的主要目的就是研究虚拟键盘与fixed的问题,期间因为同事问起闭包与事件委托(阻止冒泡)相关问题,便穿插了一篇别的: [小贴士]工作中的”闭包“与事件委托的”阻止冒泡“,有兴趣的朋友可 ...

  4. C#调用Windows(8/10)自带的虚拟键盘

    以下是调用代码: private const Int32 WM_SYSCOMMAND = 274; private const UInt32 SC_CLOSE = 61536; [DllImport( ...

  5. 关于cocos2d-x 中 CCEditBox 的输入位置和IOS虚拟键盘位置不重合的bug

    这个文章的名字起的实在是有点长,主要是怕说不清楚. 在IOS上,输入时,我看到过的比较少,就两种,如附件两张图.一个是虚拟键盘的输入框完全是在CCEditBox上,另一张虚拟键盘的输入区域是紧挨着键盘 ...

  6. navigationcontroller和navigationbar和navigationitem之间的区别以及不用nib实现点击屏幕关闭虚拟键盘20130911

    1.UIViewController UIView的关系. UIView是视图,UIViewController是视图控制器,两者之间是从属关系,当创建一个UIViewController的时候,一般 ...

  7. 【UE4 C++】 启动 / 关闭外部exe、开启虚拟键盘

    启动/关闭外部exe 引擎自带 FPlatformProcess::CreateProc() FPlatformProcess::TerminateProc() windows api ShellEx ...

  8. Android开发案例 - 自定义虚拟键盘

    所有包含IM功能的App(如微信, 微博, QQ, 支付宝等)都提供了Emoji表情之类的虚拟键盘,  如下图:    本文只着重介绍如何实现输入法键盘和自定义虚拟键盘的流畅切换, 而不介绍如何实现虚 ...

  9. Xamarin的不归路-安卓模拟器启动慢&没有虚拟键盘

    1.启动慢解决方案:参考这篇文章进行配置 http://www.360doc.com/content/13/1002/18/532901_318605525.shtml 2.模拟器没有虚拟键盘解决方案 ...

  10. [原创]cocos2d-x研习录-第三阶 特性之按键与虚拟键盘

    Cocos2D-x引擎支持按键事件,它能检测设备的键盘输入并处理相应的事件.而基于不同操作系统的移动设备,可供用户操作的按键数量和功能都存在差异.   Cocos2D-x使用CCKeypadDeleg ...

随机推荐

  1. 算法学习笔记(5): 最近公共祖先(LCA)

    最近公共祖先(LCA) 目录 最近公共祖先(LCA) 定义 求法 方法一:树上倍增 朴素算法 复杂度分析 方法二:dfs序与ST表 初始化与查询 复杂度分析 方法三:树链剖分 DFS序 性质 重链 重 ...

  2. 无旋树堆(FHQ-Treap)学习笔记

    简介 无旋树堆(一般统称 \(\text{FHQ-Treap}\)),是一种平衡树.可以用很少的代码达到很优秀的复杂度. 前置知识: 二叉搜索树 \(\text{BST}\) \(\text{Trea ...

  3. vue-echarts数据可视化实现自适应屏幕进行缩放,这个我写了两篇文章,一个用了vue-echarts,一个直接用的charts ,我可真机智 啊~~~

    使用这个后可以实现屏幕自适应 效果如下 <template> <div style="width:100%;height:20rem" ref="res ...

  4. JavaScript 、三个点、 ...、点点点 是什么语法

    笔者在学习ts函数式的时候见到这样的写法,这个语法是es6的扩展运算符,可以在函数调用/数组构造时, 将数组表达式或者string在语法层面展开:还可以在构造字面量对象时, 将对象表达式按key-va ...

  5. VUE10 计算属性

    1 Vue计算属性简介 1)定义:我们需要一个属性,但是这个属性不存在,但是可以通过已有的属性计算得来,那么就可以定义一个计算属性. 2)原理:底层借助了Object.defineproperty方法 ...

  6. 还不来了解ChatGPT?免费账号

      可以查看这里给大家提供了一些免费的账号供大家尝试 note.youdao.com/s/OvxaLZiF   ChatGPT作为最近火遍互联网的AI项目,获得了大家空前的关注,短短两个多月注册人数破 ...

  7. P12_小程序API的3大分类

    小程序 API 概述 小程序中的 API 是由宿主环境提供的,通过这些丰富的小程序 API,开发者可以方便的调用微信提供的能力,例如:获取用户信息.本地存储.支付功能等. 小程序 API 的 3 大分 ...

  8. vs2019编写代码时的光标变成了黑块,选中字时替换掉了黑块选中的字的解决方法

    这是由于不小心按到了Insert键 解决方法:再按一下Insert就好了. 因为插入键(insert)是一个状态表示键 当你按倒它时,它会进入一个覆盖模式,在光标位置新输入字会替代原来的字:另一种为插 ...

  9. Dao包 对数据库的操作

    //添加 public static int add(Bean1 bean){ String sql = "insert into classtable(classname,teacher, ...

  10. Redis(安装、启动、测试、环境)

    Redis 概述: Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数 ...