问题
I have a QML TextEdit
element, I plan for append some text and put the cursor at the end. My method:
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;
}
}
}
}
but it doesn't work. How can i do that?
回答1:
- Set
textFormat
toTextEdit.PlainText
because you have lots of invisible html code otherwise. The following code works for me.
Keys.onReturnPressed: { event.accepted = true txtCommands.text = txtCommands.text + ">: " txtCommands.cursorPosition = txtCommands.text.length }
回答2:
If your TextEdit is not in plain text mode textFormat: TextEdit.PlainText
, and is instead set to textFormat: TextEdit.RichText
, thentxtCommands.text.length
will include the length off all the non-visible html/rtf formatting markup stuff.
The simplest solution is to use txtCommands.length
. This property only gives the length of the visible characters.
回答3:
- Create a string
temp
variable. temp= TextEdit.getText(0, TextEdit.length)
TextEdit.cursuorPosition += temp.length
来源:https://stackoverflow.com/questions/14031070/qml-how-to-put-text-cursor-at-the-end-of-textedit-element