检测在 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 设备上。

在这种情况下,我建议测试这两个解决方案:

  1. 监听 displayText 属性 变化 onDisplayTextChanged 插槽,或
  2. 监听 preeditText 属性 随着 onPreeditTextChanged
  3. 的变化

如果是这种情况,并且您希望在每个字符之后提交文本,您可以这样做:

TextField {
  ...
  onPreeditTextChanged: if ( this is android ) Qt.inputMethod.commit() // to avoid Android's uncommited text
}

确保您只在 Android 上执行此操作(其他平台可能会将某些键盘上的字符加倍)!这是一个小技巧。我会先尝试 displayText 属性.