Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何在每次单击qml TextInput时指定光标位置?_Qt_Qml - Fatal编程技术网

Qt 如何在每次单击qml TextInput时指定光标位置?

Qt 如何在每次单击qml TextInput时指定光标位置?,qt,qml,Qt,Qml,我试图克服用户用手指指定光标位置的问题。例如,假设我的用户没有鼠标,他们想完全删除一个字符串并用新的替换它。所以他们推(点击)文本输入框,光标把它们放在字符串的中间。那么他们做什么呢?他们要么删除字符串的前半部分,然后再次单击框(这次尝试在字符串的末尾着陆),要么立即再次单击,尝试在字符串的末尾着陆 我可以看到,对于一个视力不好、手指肥胖的人来说,这让人感到非常沮丧。不要介意他们试图这样做的可能性,比如说在拖拉机上,在光线不太好的开阔地上蹦蹦跳跳,视力不好,手指肥胖 相反,我希望光标总是落在当前

我试图克服用户用手指指定光标位置的问题。例如,假设我的用户没有鼠标,他们想完全删除一个字符串并用新的替换它。所以他们推(点击)文本输入框,光标把它们放在字符串的中间。那么他们做什么呢?他们要么删除字符串的前半部分,然后再次单击框(这次尝试在字符串的末尾着陆),要么立即再次单击,尝试在字符串的末尾着陆

我可以看到,对于一个视力不好、手指肥胖的人来说,这让人感到非常沮丧。不要介意他们试图这样做的可能性,比如说在拖拉机上,在光线不太好的开阔地上蹦蹦跳跳,视力不好,手指肥胖

相反,我希望光标总是落在当前字符串的末尾,但我似乎找不到一个好方法来使用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()或其他属性,文本输入的信号或方法,一旦用户单击文本输入框,将导致光标位置始终位于字符串的末尾?

为什么您自己尝试捕捉返回键

我总是使用已经存在的,这是正常工作

activeFocus是一个只读属性,因此它实际上不起作用。您可以尝试在thisItemHere项目上强制ActiveFocus,甚至在顶部窗口上强制ActiveFocus,以从TextInput中释放焦点

还有,你可以看看这个酒店吗?在获得焦点时,将此设置为inputItem.length应该有效吗