首页 > 其他分享 >Qt Virtual Keyboard 自适应位置

Qt Virtual Keyboard 自适应位置

时间:2024-02-26 20:12:09浏览次数:21  
标签:Qt Keyboard Virtual height inputItemGeometry InputContext pInputItem QRectF keyb

一. 实现

inputcontex.h增加如下内容:

1 Q_PROPERTY(QRectF inputItemGeometry READ inputItemGeometry)
2 QRectF inputItemGeometry();

inputcontex.cpp增加如下内容:

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

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

InputPanel.qml增加如下内容:

 1     anchors.horizontalCenter: parent.horizontalCenter
 2     width: Screen.desktopAvailableWidth * 2 / 3
 3 
 4     states: State {
 5         name: "visible";
 6         when: keyboard.active;
 7         PropertyChanges {
 8             target: keyboard;
 9             y: getInputY()
10         }
11     }
12     transitions: Transition {
13         from: "";
14         to: "visible";
15         reversible: true;
16         ParallelAnimation {
17             NumberAnimation {
18                 properties: "y";
19                 duration: 250;
20                 easing.type: Easing.InOutQuad;
21             }
22         }
23     }
24     function getInputY(){
25         if(InputContext.inputItemGeometry.y + InputContext.inputItemGeometry.height + keyboard.height <= screenHeight){
26             return InputContext.inputItemGeometry.y + InputContext.inputItemGeometry.height
27         }
28         else if(InputContext.inputItemGeometry.y - keyboard.height - 100 >= 0)
29         {
30             return InputContext.inputItemGeometry.y - keyboard.height - 50
31         }
32         else
33         {
34             return screenHeight - keyboard.height
35         }
36     }

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

二. 效果

标签:Qt,Keyboard,Virtual,height,inputItemGeometry,InputContext,pInputItem,QRectF,keyb
From: https://www.cnblogs.com/ybqjymy/p/18035079

相关文章

  • Qt Virtual Keyboard实现自适应悬浮键盘(多种方法详细记录)
    项目需求实现悬浮键盘,点击QLineEdit或QTextEdit自动弹出自适应悬浮键盘,尝试了以下几种方法后选择了修改QTVirtualKeyboard源码。在这里把其他方法/想法也列出来做一下记录。项目环境:QT5.13.2VS2017方法1:调用windows自带系统软件盘介绍windows自带软键盘分为......
  • Qt QML使用虚拟键盘示例(附完整源码)
    使用"虚拟键盘"注意(例子的Qt版本:5.12.4)注意一:     /*必须在main.cpp开始处加入如下代码,否则无法使用"虚拟键盘"*/     qputenv(“QT_IM_MODULE”,QByteArray(“qtvirtualkeyboard”)); 注意二:     键盘大小是根据宽度自动计算的,所以,应用程序应该只设置Inpu......
  • Qt 常用基础设置
    //右键菜单无效setContextMenuPolicy(Qt::NoContextMenu);//设置窗口背景透明setAttribute(Qt::WA_TranslucentBackground);//设置外框隐藏setWindowFlag(Qt::FramelessWindowHint);//设置无焦点setFocusPolicy(Qt::NoFocus);//设置lineEdit未输入字时显示文字l......
  • QT多线程实现-----问题解决及实现方式
    一、概述恰巧正在做一个多线程通信的项目,具体功能是与下位机交互和文件发送,在子线程中实现命令发送和文件传输。使用movetothread主要遇到以下几个问题:1.Socketnotifierscannotbeenabledordisabledfromanotherthread。2.子线程完成文件传输,发送信号......
  • Qt的拖拽操作例子
    本文是一个拖拽文本的例子。演示了如何把按钮的标题拖拽到文本编辑框里。Qt对拖拽的封装很好,QDrag对象简单易用。本文程序测试环境是VS2017和Qt5.9。下面是程序拖拽时的效果图,可以看出来拖拽的时候光标下方也显示了文本内容:头文件。本功能是在主窗口中实现的。下面代码里QtTest......
  • 项目实战:Qt监测操作系统cpu温度v1.1.0(支持windows、linux、国产麒麟系统)
    需求  使用Qt软件开发一个检测cpu温度的功能。  兼容windows、linux,国产麒麟系统(同为linux)Demo  windows上运行(需要管理员权限):    国产麒麟操作上运行(需要管理员权限):   功能描述v1.1.0windows上定时检测输出cpu温度。linux上定时检测输出cpu......
  • 用QTimeLine实现滑动动画
    一般在Qt实现动画可以用QAbstractAnimation的子类实现。这里给出一个不一样的例子实现动画,即用QTimeLine实现。功能是有一个QStackedWidget,它有两个子页面。默认显示第一页。点击“动画”按钮播放一段动画使页面第一页滑动到第二页,然后切换到第二页。程序测试环境是VS2017和Qt5.9......
  • 项目实战:Qt监测操作系统物理网卡通断v1.1.0(支持windows、linux、国产麒麟系统)
    需求  使用Qt软件开发一个检测网卡的功能。  兼容windows、linux,国产麒麟系统(同为linux)Demo  windows上运行:      国产麒麟操作上运行:     功能描述v1.1.0windows上实时检测出网卡通断(插拔,失联等情况)linux上实时检测出网卡通断(插拔,失联等......
  • 解决qtcreator在某次用sudo启动后,再次启动提示权限不足的问题
    现象:sudo./qtcreator启动qt,退出,再次启动打开项目提示"permissiondenied"这是因为第一次使用sudo权限启动QtCreator时,生成了一些配置文件或者临时文件,这些文件的所有者变成了root用户。因此,当你尝试以普通用户身份再次打开QtCreator时,会因为缺少对这些文件的访问......
  • 恢复VCPkg(2023-01-27)中Vtk[Qt]的默认依赖为Qt5
    通过查看vtk的更新的日志已于2023-01-27将默认依赖的Qt的版本由5更新到6gitlog--.\ports\vtkcommit27fb19bdcc1f6ddb1261cffb5372724ac1d63a93Author:LilyWang<[email protected]>Date:2023-08-23[manyports]FixURLSofdownlo......