2012-07-27 6 views
8

Ich habe ein Formular mit einer QTextEdit darauf, die translationInput heißt. Ich versuche, die Bearbeitungsfunktion für den Benutzer bereitzustellen.Bewegen Sie den Cursor innerhalb von QTextEdit

Diese QTextEdit enthält HTML-formatierten Text. Ich habe eine Reihe von Tasten, wie "fett", "Kursiv", und so weiter, die die entsprechenden Tags in das Dokument hinzufügen sollte. Wenn die Taste gedrückt wird, wenn kein Text ausgewählt ist, möchte ich nur ein Paar Tags einfügen, z. B. <b></b>. Wenn ein Text ausgewählt ist, sollen die Tags links und rechts davon erscheinen.

Das funktioniert gut. Ich möchte aber auch, dass der Cursor vor dem schließenden Tag danach platziert wird, so dass der Benutzer fortfahren kann, innerhalb des neu hinzugefügten Tags zu tippen, ohne den Cursor manuell neu positionieren zu müssen. Standardmäßig erscheint der Cursor rechts 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 Kursiv Taste haben:

//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); 

Allerdings ist die letzte Zeile nichts tun, wird der Cursor nicht bewegt, obwohl die movePosition() kehrt true, die bedeutet, dass alle Operationen erfolgreich abgeschlossen wurden.

Ich habe auch versucht, dies mit anstelle von QTextCursor::Left, und versuchte es vor und nach der Rückkehr den Fokus auf die Bearbeitung, ändert sich nichts.

Die Frage ist also, wie kann ich den Cursor innerhalb meiner QTextEdit bewegen?

Antwort

9

Das Problem wurde behoben, indem tiefer in die Dokumentation geforscht wurde.

Die Funktion textCursor() gibt eine Kopie des Cursors aus der QTextEdit zurück. Also, um die tatsächliche eine zu ändern, setTextCursor() Funktion zu verwenden:

QTextCursor tmpCursor = ui.translationInput->textCursor(); 
tmpCursor.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, 4); 
ui.translationInput->setTextCursor(tmpCursor); 
+10

Sie direkt den Textcursor, indem Sie 'Movecursor() bewegen kann': 'ui.translationInput-> Movecursor (QTextCursor :: links, QTextCursor :: MoveAnchor, 4); ' – iliis

+0

Ich denke, der obige Kommentar sollte in eine Antwort umgewandelt werden. –