我正在尝试解决用户用手指指定光标位置的问题。例如,假设我的用户没有鼠标,他们想完全删除一个字符串,然后将其替换为新的字符串。因此,他们按下(单击)TextInput框,然后光标将它们放在字符串的中间。那他们怎么办?好吧,他们要么删除字符串的前半部分,然后再次单击该框(这一次试图降落在字符串的末尾),要么立即再次单击以尝试降落在字符串的末尾。
对于视力不好和手指发胖的人,我感到非常沮丧。没关系,他们尝试在拖拉机上执行此操作的可能性很大,在光线不佳,视力不好和手指发胖的情况下,在开阔的田野周围弹跳。
相反,我希望光标始终位于当前字符串的末尾,但是我似乎找不到使用TextInput做到这一点的好方法。我找到了使用按钮的解决方法:
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.VirtualKeyboard 2.4
import QtQuick.Controls 2.5
Window {
id: window
visible: true
width: 640
height: 480
Item{
id: thisItemHere
anchors.centerIn: parent
Button {
id: button
anchors.centerIn: parent
text: qsTr("Button")
onClicked: inputItem.forceActiveFocus()
}
TextInput{
id:inputItem
text: "Enter text here"
visible: false
EnterKeyAction.enabled: inputItem.text.length > 0 || inputItem.inputMethodComposing
EnterKeyAction.label: "Next"
Keys.onReleased: {
if (event.key === Qt.Key_Return) {
button.text = inputItem.text
console.log(inputItem.text)
//activeFocus = false not working...
}
}
onActiveFocusChanged: {
if(activeFocus) {
inputPanelContainer.textDisplay = inputItem.text
}
}
onDisplayTextChanged: {
inputPanelContainer.textDisplay = text
}
}
}
InputPanelContainer {
id: inputPanelContainer
x: 0
y: window.height
}
}
我不喜欢不得不变通。我尝试使用全选功能:
onActiveFocusChanged: {
selectAll()
if(activeFocus) inputPanelContainer.textDisplay = inputItem.text
}
但是我认为,要使此功能有效,我需要找到一种结束焦点的好方法,因为目前,我似乎无法弄清楚一旦用户完成了字符串的编辑后如何结束焦点,因此仅在第一个提示中突出显示该焦点相互作用。换句话说,按Enter键后,光标仍在文本框中,闪烁。
所以也许有人可以告诉我结束焦点的正确方法,或者有人可以告诉我如何使用moveCursorSelection()或TextInput的其他属性,信号或方法,这将导致光标位置始终在末尾用户单击TextInput框后该字符串的内容?
答案 0 :(得分:1)
为什么您要尝试自己获取Return键?
为此,我总是使用已经存在的onEditingFinished signal,它可以正常工作。
activeFocus 是只读属性,因此确实无法正常工作。您可以尝试在 thisItemHere 项甚至top-Window上强制ActiveFocus,以释放TextInput的焦点。
还可以查看cursorPosition属性吗?获得焦点时将其设置为 inputItem.length ,应该起作用吗?