上一篇文章介绍了 Qt5 Virtual Keyboard的编译和大小设置 ,现在让我们接下来看看如何让Qt键盘实现根据输入控件的位置和大小而自动调整自己的位置。
Qt5 Virtual Keyboard C++集成与实现二(自适应位置)
一. 实现
-
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); }
我们使用这个函数来获取当前控件的位置和大小信息。
-
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++集成与实现一(基于QWidget的多语言键盘编译及自定义大小)
- Qt5 Virtual Keyboard C++集成与实现三(解决模态对话框键盘失效问题)
为啥那个函数,用了qwidget会报错,我引入qwidgets模块和包含头文件都不行,都编译不过去
那个函数用了qwidget会报错,我导入qwidgets模块和包含头文件也编译不过去
清除后重新QMake再编译
嗨,您好。您编译过了吗?
您好,这个inputpanel.qml加的代码详细说一下,加哪,源码需要去掉什么吗。目前按你的说法,我的键盘跑没了,光看到个切换语言的?图标
您这个是什么效果,自动显示在输入控件下边吗
您好,把这个位置的代码和大小的详细指点一下好吗,非常感谢