一种解决QtVirtualKeyboard遮挡输入框的方法(无需修改官方源代码)

网上大多是用scroll部件来解决输入框被遮挡的问题,但是c++界面类好像不能用,主要我闲太麻烦。。。

直接上干货

效果如图(红色边框是为了方便大家查看布局手动加的)

环境说明:

    1. qt5.15.0 arm交叉编译版本(静态库版本)

1. .pro文件中添加如下:

    其中 contains(QT_ARCH, arm){} 我是为了判断arm平台,大家可以根据实际需求使用或删除

contains(QT_ARCH, arm) {
    INCLUDEPATH += $$[QT_INSTALL_PREFIX]/include/QtVirtualKeyboard/$$[QT_VERSION]/QtVirtualKeyboard/private
    LIBS += -L$$[QT_INSTALL_PREFIX]/qml/QtQml -lqmlplugin
}

手动添加 qmlplugin插件是由于5.15.0的bug,部署到arm板子上后报以下警告,并且不能使用虚拟键盘,貌似qt6已经修复了(但我没有试过)。

[qrc:/QtQuick/VirtualKeyboard/content/InputPanel.qml::32]qrc:/QtQuick/VirtualKeyboard/content/InputPanel.qml:32:1: module "QtQml" plugin "qmlplugin" not found 
     import QtQml 2.14 
     ^
2. main.cpp文件修改如下
2.1 添加头文件
#include <QtVirtualKeyboard>
#include "settings_p.h"

2.2 重点来了,main函数开头添加如下内容

int main(int argc, char *argv[])
{
    // 设置虚拟键盘为全屏模式,避免遮挡输入框
    QtVirtualKeyboard::Settings::instance()->setFullScreenMode(true);

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

    QApplication a(argc, argv);

....................

    MainWindow w;
    w.show();
    return a.exec();
}

此处参考了官方提供的示例basic,后来研究了一下代码,fullScreenMode是Settings类的静态变量,会影响到整个qtvirtualkeyboard。

官方示例只有最大化窗口时且要大于16:9的尺寸,才会触发fullScreenMode。

        Binding {
            target: VirtualKeyboardSettings
            property: "fullScreenMode"
            //value: appContainer.height > 0 && (appContainer.width / appContainer.height) > (16.0 / 9.0)
            value: true
            restoreMode: Binding.RestoreBinding
        }
3. 总结

    这个方法有点取巧,QML内建virtualkeyboard则无需如此,只是我前期代码都是用C++界面类写的,改动的工作量太大,所以如此操作的。

    此方法也避免了很多嵌入式平台不支持多个顶层窗口,打开虚拟键盘时,除虚拟键盘显示的部分外,其它区域显示纯色(我的是蓝色)背景。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值