Pregunta

tengo un formulario con un QTextEdit en él, que se llama translationInput.Estoy intentando proporcionar la función de edición al usuario.

Este QTextEdit contendrá texto con formato HTML.Tengo un conjunto de botones, como "atrevido", "Itálico", etc., lo que debería agregar las etiquetas correspondientes al documento.Si se presiona el botón cuando no hay texto seleccionado, solo quiero insertar un par de etiquetas, por ejemplo, <b></b>.Si se selecciona algún texto, quiero que las etiquetas aparezcan a izquierda y derecha.

Esto funciona bien.Sin embargo, también quiero que se coloque el cursor. antes de la etiqueta de cierre después de eso, el usuario podrá continuar escribiendo dentro de la etiqueta recién agregada sin necesidad de reposicionar el cursor manualmente.De forma predeterminada, el cursor aparece a la derecha después el texto nuevo agregado (en mi caso, justo después de la etiqueta de cierre).

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

//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, aunque el movePosition() devoluciones true, lo 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, eso no cambia nada.

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

¿Fue útil?

Solución

Resolvió el problema profundizando en los documentos.

El textCursor() la función devuelve un Copiar del cursor desde el QTextEdit.Entonces, para modificar el actual, setTextCursor() Se debe utilizar la función:

QTextCursor tmpCursor = ui.translationInput->textCursor();
tmpCursor.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, 4);
ui.translationInput->setTextCursor(tmpCursor);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top