給你三張圖自己體會!
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 //獲取輸入法高度
}
}
}