2012-07-27 17 views
8

Tengo un formulario con un QTextEdit en él, que se llama translationInput. Estoy tratando de proporcionar la funcionalidad de edición para el usuario.Moviendo el cursor dentro de QTextEdit

Este QTextEdit contendrá texto con formato HTML. Tengo un conjunto de botones, como "negrita", "Cursiva", y así sucesivamente, que deberían agregar las etiquetas correspondientes en el documento. Si se presiona el botón cuando no se selecciona texto, solo quiero insertar un par de etiquetas, por ejemplo, <b></b>. Si se selecciona texto, quiero que las etiquetas aparezcan a la izquierda y a la derecha.

Esto funciona bien. Sin embargo, también quiero que el cursor se coloque antes de la etiqueta de cierre después de eso, para que el usuario pueda seguir escribiendo dentro de la nueva etiqueta agregada sin necesidad de cambiar la posición del cursor manualmente. De forma predeterminada, el cursor aparece a la derecha después de el nuevo texto agregado (por lo que en mi caso, justo después de la etiqueta de cierre).

Aquí está el código que tengo para el botón Cursiva :

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

Sin embargo, la última línea no hace nada, el cursor no se mueve, a pesar de las declaraciones de movePosition()true, que significa que todas las operaciones se completaron con éxito.

También he intentado hacer esto con QTextCursor::PreviousCharacter en lugar de QTextCursor::Left, e intenté moverlo antes y después de devolver el foco a la edición, que no cambia nada.

Entonces la pregunta es, ¿cómo muevo el cursor dentro de mi QTextEdit?

Respuesta

9

Resolvió el problema al profundizar en los documentos.

La función textCursor() devuelve una copia del cursor desde el QTextEdit. Por lo tanto, para modificar el actual, setTextCursor() función debe utilizarse:

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

Puede pasar directamente el cursor de texto mediante el uso de 'MoveCursor()': ' ui.translationInput-> MoveCursor (QTextCursor :: Izquierda, QTextCursor :: MoveAnchor, 4); ' – iliis

+0

Creo que el comentario anterior debe convertirse en una respuesta. –

Cuestiones relacionadas