Bewegen des Cursors innerhalb von QTextEdit
-
12-12-2019 - |
Frage
Ich habe ein Formular mit einem QTextEdit
darauf, das heißt translationInput
.Ich versuche, die Bearbeitungsfunktionen für den Benutzer bereitzustellen.
Dieser QTextEdit
enthält HTML-formatierten Text.Ich habe eine Reihe von Knöpfen, wie "Bold", "Italic", und so weiter, die die entsprechenden Tags in das Dokument einfügen sollen.Wenn die Schaltfläche gedrückt wird, wenn kein Text ausgewählt ist, möchte ich nur ein Paar Tags einfügen, zum Beispiel, <b></b>
.Wenn ein Text ausgewählt ist, sollen die Tags links und rechts davon angezeigt werden.
Das funktioniert gut.Ich möchte jedoch auch, dass der Cursor platziert wird vor dem schließenden Tag danach kann der Benutzer mit der Eingabe innerhalb des neu hinzugefügten Tags fortfahren, ohne den Cursor manuell neu positionieren zu müssen.Standardmäßig wird der Cursor rechts angezeigt nach der neu hinzugefügte Text (also in meinem Fall direkt nach dem schließenden Tag).
Hier ist der Code, den ich für die habe Italic Schaltfläche:
//getting the selected text(if any), and adding tags.
QString newText = ui.translationInput->textCursor().selectedText().prepend("<i>").append("</i>");
//Inserting the new-formed text into the edit
ui.translationInput->insertPlainText( newText );
//Returning focus to the edit
ui.translationInput->setFocus();
//!!! Here I want to move the cursor 4 characters left to place it before the </i> tag.
ui.translationInput->textCursor().movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, 4);
Die letzte Zeile macht jedoch nichts, der Cursor bewegt sich nicht, obwohl die movePosition()
zurückgeben true
, was bedeutet, dass alle Operationen erfolgreich abgeschlossen wurden.
Ich habe das auch versucht mit QTextCursor::PreviousCharacter
statt QTextCursor::Left
, und versuchte es vor und nach dem Zurücksetzen des Fokus auf die Bearbeitung zu verschieben, das ändert nichts.
Die Frage ist also, wie bewege ich den Cursor in meinem QTextEdit
?
Lösung
Das Problem wurde behoben, indem tiefer in die Dokumente eingegriffen wurde.
Der textCursor()
funktion gibt a zurück kopieren des Cursors aus dem QTextEdit
.Also, um den tatsächlichen zu ändern, setTextCursor()
funktion muss verwendet werden:
QTextCursor tmpCursor = ui.translationInput->textCursor();
tmpCursor.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, 4);
ui.translationInput->setTextCursor(tmpCursor);