虚拟键盘隐藏文本 QML
Virtual Keyboard hides Text QML
我有以下虚拟键盘,它将轻弹的 y 设置为不隐藏文本的值。设置变量包含下面的 IntSettingsRow。
//Administration.qml
K_VirtualKeyBoard{
id: keyboard
z:100
onVisibleChanged: {
if(visible){
if(settings.posY - keyboard.height > 0){
flickable.contentY = settings.posY - keyboard.height + 20
}
else{
flickable.contentY = 0
}
}
if(!visible){
settings.settingsRow.textField.focus = false
flickable.contentY = 0
}
}
}
我有一个 IntSettingsRow,它是一个用于插入一些文本的文本字段。
//GeneralSettings.qml
IntSettingsRow{
id: touchDeactivationTimedTime
height: itemHeight
anchors.left: parent.left
anchors.right: parent.right
anchors.topMargin: 8
validator: IntValidator{bottom: 10; top: 300}
title: qsTr("deactivate time")+":"
value: currentSettings?currentSettings.deactivationTime:0
onValueChanged:{
var val = parseInt(value)
if (!isNaN(val)){
currentSettings?currentSettings.deactivationTime = val:{}
}
}
onEditingFinished: {
if (value === "") textField.text = currentSettings.deactivationTime
}
onFocusChanged: {
settingsRow = touchDeactivationTimedTime
if(!textField.focus){
editingFinished()
posY = 0
}else{
posY = mapToItem(parent, x, y).y
}
}
}
不知何故,在第一次单击文本字段时,虚拟键盘会按预期弹出,并且可轻弹移动。我隐藏键盘并再次尝试它不起作用。所以虚拟键盘弹出但是flickable没有变化
我找到了一个解决方案,可以直接从我的 intsettingsrow 中的 onfocus 编辑 flickable。现在可以使用了
所以我将 K_VirtualKeyboard 更改为:
K_VirtualKeyBoard{
id: keyboard
z:100
onVisibleChanged: {
if(!visible){
flickable.contentY = 0
}
}
}
并将其添加到触发键盘的文本字段
textField.onReleased: {
var keyBoardY
if(keyboard.visible)
keyBoardY = keyboard.y
else
keyBoardY = keyboard.y - keyboard.height
if(keyBoardY < (mapToItem(root.parent.parent,0,0).y + height*2))
flickable.contentY = (mapToItem(root.parent.parent,0,0).y + height*2) - keyBoardY + 8
}
我有以下虚拟键盘,它将轻弹的 y 设置为不隐藏文本的值。设置变量包含下面的 IntSettingsRow。
//Administration.qml
K_VirtualKeyBoard{
id: keyboard
z:100
onVisibleChanged: {
if(visible){
if(settings.posY - keyboard.height > 0){
flickable.contentY = settings.posY - keyboard.height + 20
}
else{
flickable.contentY = 0
}
}
if(!visible){
settings.settingsRow.textField.focus = false
flickable.contentY = 0
}
}
}
我有一个 IntSettingsRow,它是一个用于插入一些文本的文本字段。
//GeneralSettings.qml
IntSettingsRow{
id: touchDeactivationTimedTime
height: itemHeight
anchors.left: parent.left
anchors.right: parent.right
anchors.topMargin: 8
validator: IntValidator{bottom: 10; top: 300}
title: qsTr("deactivate time")+":"
value: currentSettings?currentSettings.deactivationTime:0
onValueChanged:{
var val = parseInt(value)
if (!isNaN(val)){
currentSettings?currentSettings.deactivationTime = val:{}
}
}
onEditingFinished: {
if (value === "") textField.text = currentSettings.deactivationTime
}
onFocusChanged: {
settingsRow = touchDeactivationTimedTime
if(!textField.focus){
editingFinished()
posY = 0
}else{
posY = mapToItem(parent, x, y).y
}
}
}
不知何故,在第一次单击文本字段时,虚拟键盘会按预期弹出,并且可轻弹移动。我隐藏键盘并再次尝试它不起作用。所以虚拟键盘弹出但是flickable没有变化
我找到了一个解决方案,可以直接从我的 intsettingsrow 中的 onfocus 编辑 flickable。现在可以使用了
所以我将 K_VirtualKeyboard 更改为:
K_VirtualKeyBoard{
id: keyboard
z:100
onVisibleChanged: {
if(!visible){
flickable.contentY = 0
}
}
}
并将其添加到触发键盘的文本字段
textField.onReleased: {
var keyBoardY
if(keyboard.visible)
keyBoardY = keyboard.y
else
keyBoardY = keyboard.y - keyboard.height
if(keyBoardY < (mapToItem(root.parent.parent,0,0).y + height*2))
flickable.contentY = (mapToItem(root.parent.parent,0,0).y + height*2) - keyBoardY + 8
}