1、前提
说明:我使用的是第三方软键盘 QVirtualKeyboard
QVirtualKeyboard: Qt5虚拟键盘支持中英文,仿qt官方的virtualkeyboard模块,但使用QWidget实现。 - Gitee.com
由于参考了几篇文章尝试但没有效果,链接如下:
文章一:可能对qml程序无效
Qt程序全屏后调用软键盘时键盘无法输入的解决方法_qt spinbox 不能用键盘输入-CSDN博客
文章二:反正就是没效果
Qt编写的qml程序全屏时,挡住系统虚拟键盘的解决办法_qml 软键盘 遮挡-CSDN博客
效果图展示:
完全看不出来应用没有完全全屏不是吗?
2、解决思路
测试发现只要窗口全屏并且无边框、那么软键盘就会被遮挡。
甚至不设置全屏,只要宽高和屏幕尺寸一致就会遮挡软键盘。
原理不太懂,也不愿意花太多时间去研究软键盘代码实现。
经过我测试发现,窗口尺寸比屏幕尺寸少1像素,仍然可以做到显示完全全屏,并且可以弹出软键盘。
那么直接隐藏窗口标题栏,和桌面的任务栏,并且将窗口尺寸小1像素,就可以做到应用全屏,并且不影响软键盘使用了。
3、操作方法
1、qml代码在窗口中设置无边框,隐藏标题栏,设置屏幕高度比屏幕小1像素
import QtQuick 2.7
import QtQuick.Window 2.8Window {id: rootvisible: truewidth: 1280 //实际宽度1280height: 799 //实际高度800flags:Qt.FramelessWindowHint //设置无标题栏//你的代码
}
2、设置任务栏自动隐藏
参考文章:RK3399 Ubuntu修改任务栏为自动隐藏和修改桌面背景_ubuntu 命令行设置任务栏隐藏-CSDN博客
3、设置任务栏宽度为0
任务栏宽度太宽,指针滑到屏幕底部很容易导致任务栏取消隐藏,宽度设置0,使用触摸屏几乎是无法唤起任务栏,虽然使用鼠标可以,但是正常商用环境主机是不接鼠标的不是吗?
补充:由于QVirtualKeyboard是基于QWidget的,在需要QApplication程序才能触发,所以需要把main函数中的QGuiApplication app() 改成QApplication app()
4、方案补充
好吧,高度差1像素还是有影响的,在有些情况下会出现屏幕边缘一条亮线的情况。
更好一些的方案窗口全屏,再点击输入框之后改变窗口高度,另外调整QVirtualKeyboard的软键盘宽度和屏幕宽度一致,这样在需要输入的情况调整窗口高度让软键盘显示出来,输入完成窗口全屏显示就行了。