给你三张图自己体会!
![]() | ![]() | ![]() |
mainlayout是最外层布局,代码写的太多,往外摘东西不好摘,就把主要代码复制了一下,大家试着理解一下,代码很简单,就是在输入框上层用MouseArea做一个遮罩档住输入框,目的是点的时候不让输入框获取到焦点还能把事件拦截下来,然后上移主布局,上移的高度是输入法的高度,最后禁用遮罩,设置输入框焦点完工
这里有个问题,就是如果输入法从来没弹出来过,那输入法的高度是不知道的,也就是说这种方法其实并不完美,第一次的时候还是会顶出UI,但只限于第一次,这个问题暂时不搞,时间紧任务重,不能把生命浪费在这种地方,过完今天离死就又近一天,真可怕!
property double keyheight : 0 //输入法高度
TextArea{
id:messageField
//输入框遮罩,解决输入法整体上移问题
MouseArea{
id:inputMask
anchors.fill: parent
onClicked: {
mainlayout.y = 0 - keyheight //上移一个输入法的高度
inputMask.enabled = false //禁用当前遮罩
messageField.forceActiveFocus() //设置输入框焦点
}
}
}
Connections{
target: Qt.inputMethod
onVisibleChanged : { //显没显示
if(Qt.inputMethod.visible === false){ //输入法落下去了
mainlayout.y = 0
inputMask.enabled = true
}
}
onKeyboardRectangleChanged: { //输入法大小改变
if(keyheight === 0){
keyheight = Qt.inputMethod.keyboardRectangle.height / Screen.devicePixelRatio //获取输入法高度
}
}
}