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?

War es hilfreich?

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top