Qt5 Virtual Keyboard C++集成与实现二(自适应位置)

上一篇文章介绍了 Qt5 Virtual Keyboard的编译和大小设置 ,现在让我们接下来看看如何让Qt键盘实现根据输入控件的位置和大小而自动调整自己的位置。

Qt5 Virtual Keyboard C++集成与实现二(自适应位置)

一. 实现

  1. inputcontex.h增加如下内容:

    Q_PROPERTY(QRectF inputItemGeometry READ inputItemGeometry)
    QRectF inputItemGeometry();

    inputcontex.cpp增加如下内容:

    QRectF InputContext::inputItemGeometry()
    {
    QWidget* pInputItem = (QWidget*)inputItem();
    return pInputItem ? QRectF(((QWidget*)pInputItem->parent())->mapToGlobal(pInputItem->geometry().topLeft()), pInputItem->geometry().size()) : QRectF(0,0,0,0);
    }

    我们使用这个函数来获取当前控件的位置和大小信息。

  2. InputPanel.qml增加如下内容:

        anchors.horizontalCenter: parent.horizontalCenter
        width: Screen.desktopAvailableWidth * 2 / 3
    
        states: State {
            name: "visible";
            when: keyboard.active;
            PropertyChanges {
                target: keyboard;
                y: getInputY()
            }
        }
        transitions: Transition {
            from: "";
            to: "visible";
            reversible: true;
            ParallelAnimation {
                NumberAnimation {
                    properties: "y";
                    duration: 250;
                    easing.type: Easing.InOutQuad;
                }
            }
        }
        function getInputY(){
            if(InputContext.inputItemGeometry.y + InputContext.inputItemGeometry.height + keyboard.height <= screenHeight){
                return InputContext.inputItemGeometry.y + InputContext.inputItemGeometry.height
            }
            else if(InputContext.inputItemGeometry.y - keyboard.height - 100 >= 0)
            {
                return InputContext.inputItemGeometry.y - keyboard.height - 50
            }
            else
            {
                return screenHeight - keyboard.height
            }
        }

    我们使用getInputY函数根据输入控件的位置和大小来调整Qt键盘的位置。

二. 效果

Qt5 Virtual Keyboard C++集成与实现二(自适应位置)

三. 更多键盘设置

  1. Qt5 Virtual Keyboard C++集成与实现一(基于QWidget的多语言键盘编译及自定义大小)
  2. Qt5 Virtual Keyboard C++集成与实现三(解决模态对话框键盘失效问题)
0 0 投票数
喜欢就给个好评吧!
赞(3) 打赏
未经允许不得转载:爱易默博客 » Qt5 Virtual Keyboard C++集成与实现二(自适应位置)
订阅评论
提醒
guest

9 评论
最旧
最新 最多投票
内联反馈
查看所有评论
愈走云声
愈走云声
4 年 前

为啥那个函数,用了qwidget会报错,我引入qwidgets模块和包含头文件都不行,都编译不过去

愈走云声
愈走云声
4 年 前

那个函数用了qwidget会报错,我导入qwidgets模块和包含头文件也编译不过去

愈走云声
愈走云声
4 年 前
你好,我就是inputcontext.cpp里#include <QtWidgets/QWidget>,另外virtualkeyboard.pro里QT += widgets qml quick gui gui-private core-private,还不行,你详细帮我解答一下好吗,再次非常感谢
错误信息.PNG
骆驼刺
骆驼刺
3 年 前
回复给  愈走云声

嗨,您好。您编译过了吗?

愈走云声
愈走云声
3 年 前

您好,这个inputpanel.qml加的代码详细说一下,加哪,源码需要去掉什么吗。目前按你的说法,我的键盘跑没了,光看到个切换语言的?图标

愈走云声
愈走云声
3 年 前

您这个是什么效果,自动显示在输入控件下边吗

愈走云声
愈走云声
3 年 前

您好,把这个位置的代码和大小的详细指点一下好吗,非常感谢

免责声明:本站大部分下载资源收集于网络,只做学习和交流使用,版权归原作者所有,请在下载后24小时之内自觉删除,若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,与本站无关。本站发布的内容若侵犯到您的权益,请联系站长删除,我们将及时处理! Disclaimer: Most of the download resources on this site are collected on the Internet, and are only used for learning and communication. The copyright belongs to the original author. Please consciously delete within 24 hours after downloading. If you use it for commercial purposes, please purchase the original version. If the content posted on this site violates your rights, please contact us to delete it, and we will deal with it in time!

联系我们 Contact us

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

9
0
希望看到您的想法,请您发表评论x