检测在 TextField QML 中输入的每个字符的变化
Detect changes on every character typed in a TextField QML
我想检测 TextField 中的值何时被更改。
我所看到的只是 editingFinished()
和 textEdited()
信号
仅在按下 space 字符、后退space 或回车键时发出。
在 TextField 组件中尝试 Keys.onPressed{}
但没有成功
正如预期
有人对此有更好的想法吗?
所以经过几个小时的尝试,我想我找到了一种至少对我有用的方法,使用 contentSizeChanged()
信号
TextField {
id: nameValue
anchors{
top: parent.top
left: parent.left
right: parent.right
margins: Style.margin*2
}
placeholderText: Style.selectedName
Material.accent: Style.colorAccent
font.pixelSize: Style.smallTinyFontSize
verticalAlignment: Qt.AlignVCenter
onContentSizeChanged: console.log("contentSizeChanged")
onTextChanged: console.log("TextChanged ")
onTextEdited: console.log("TextEdited")
onEditingFinished: console.log("EditingFinished")
}
Hello World
在 textField 中键入并按下 Enter 键在控制台产生此输出
这可能是文本尚未提交到该字段的问题。这种情况尤其发生在 Android 设备上。
在这种情况下,我建议测试这两个解决方案:
- 监听
displayText
属性 变化 onDisplayTextChanged
插槽,或
- 监听
preeditText
属性 随着 onPreeditTextChanged
的变化
如果是这种情况,并且您希望在每个字符之后提交文本,您可以这样做:
TextField {
...
onPreeditTextChanged: if ( this is android ) Qt.inputMethod.commit() // to avoid Android's uncommited text
}
确保您只在 Android 上执行此操作(其他平台可能会将某些键盘上的字符加倍)!这是一个小技巧。我会先尝试 displayText
属性.
我想检测 TextField 中的值何时被更改。
我所看到的只是 editingFinished()
和 textEdited()
信号
仅在按下 space 字符、后退space 或回车键时发出。
在 TextField 组件中尝试 Keys.onPressed{}
但没有成功
正如预期
有人对此有更好的想法吗?
所以经过几个小时的尝试,我想我找到了一种至少对我有用的方法,使用 contentSizeChanged()
信号
TextField {
id: nameValue
anchors{
top: parent.top
left: parent.left
right: parent.right
margins: Style.margin*2
}
placeholderText: Style.selectedName
Material.accent: Style.colorAccent
font.pixelSize: Style.smallTinyFontSize
verticalAlignment: Qt.AlignVCenter
onContentSizeChanged: console.log("contentSizeChanged")
onTextChanged: console.log("TextChanged ")
onTextEdited: console.log("TextEdited")
onEditingFinished: console.log("EditingFinished")
}
Hello World
在 textField 中键入并按下 Enter 键在控制台产生此输出
这可能是文本尚未提交到该字段的问题。这种情况尤其发生在 Android 设备上。
在这种情况下,我建议测试这两个解决方案:
- 监听
displayText
属性 变化onDisplayTextChanged
插槽,或 - 监听
preeditText
属性 随着onPreeditTextChanged
的变化
如果是这种情况,并且您希望在每个字符之后提交文本,您可以这样做:
TextField {
...
onPreeditTextChanged: if ( this is android ) Qt.inputMethod.commit() // to avoid Android's uncommited text
}
确保您只在 Android 上执行此操作(其他平台可能会将某些键盘上的字符加倍)!这是一个小技巧。我会先尝试 displayText
属性.