QML如何将文本光标放在TextEdit元素的末尾

时间:2012-12-25 13:32:16

标签: qt qt4 qml qt-quick

我有一个QML TextEdit元素,我计划附加一些文本并将光标放在最后。我的方法:

import QtQuick 1.1

Rectangle {
    color: "black"
    anchors.fill: parent
    focus: false

    TextEdit {
        id: txtCommands

        color: "lightGreen"
        anchors.fill: parent
        textFormat: TextEdit.RichText
        wrapMode: TextEdit.WordWrap

        font.family: "Consolas"
        font.pixelSize: 15
        focus: true

        MouseArea {
            anchors.fill: parent
            focus: false
        }

        Keys.onPressed: {
            console.log(event.text)

            switch (event.key) {
            case 16777234: // LEFT
            case 16777235: // UP
            case 16777237: // DOWN
            case 16777236: // RIGHT
                event.accepted = true
                break;

            case 16777220:  // Enter
                txtCommands.text = txtCommands.text + ">: "
                txtCommands.selectAll()
                txtCommands.cursorPosition = txtCommands.text.length
                break;
            }
        }
    }
}

但它不起作用。我怎么能这样做?

3 个答案:

答案 0 :(得分:5)

  1. textFormat设置为TextEdit.PlainText,因为否则会有很多不可见的HTML代码。
  2. 以下代码适用于我。

    Keys.onReturnPressed: {
        event.accepted = true
        txtCommands.text = txtCommands.text + ">: "
        txtCommands.cursorPosition = txtCommands.text.length
    }
    

答案 1 :(得分:2)

如果您的TextEdit不是纯文本模式textFormat: TextEdit.PlainText,而是设置为textFormat: TextEdit.RichText,那么
 txtCommands.text.length将包含所有不可见的html / rtf格式化标记内容的长度。

最简单的解决方案是使用txtCommands.length。此属性仅提供可见字符的长度。

答案 2 :(得分:0)

  1. 创建字符串temp变量。
  2. temp= TextEdit.getText(0, TextEdit.length)
  3. TextEdit.cursuorPosition += temp.length