Movendo o cursor dentro do QTextEdit
-
12-12-2019 - |
Pergunta
Eu tenho um formulário com um QTextEdit
nele, que é chamado translationInput
.Estou tentando fornecer a funcionalidade de edição para o usuário.
Esse QTextEdit
conterá texto formatado em HTML.Eu tenho um conjunto de botões, como "audacioso", "itálico", e assim por diante, que deve adicionar as tags correspondentes ao documento.Se o botão for pressionado quando nenhum texto estiver selecionado, desejo apenas inserir um par de tags, por exemplo, <b></b>
.Se algum texto for selecionado, quero que as tags apareçam à esquerda e à direita dele.
Isso funciona bem.No entanto, também quero que o cursor seja colocado antes da tag de fechamento depois disso, o usuário poderá continuar digitando dentro da tag recém-adicionada sem precisar reposicionar o cursor manualmente.Por padrão, o cursor aparece à direita depois o texto recém-adicionado (no meu caso, logo após a tag de fechamento).
Aqui está o código que tenho para o itálico botão:
//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);
Porém, a última linha não faz nada, o cursor não se move, mesmo que o movePosition()
retorna true
, o que significa que todas as operações foram concluídas com êxito.
Eu também tentei fazer isso com QTextCursor::PreviousCharacter
em vez de QTextCursor::Left
, e tentei movê-lo antes e depois de retornar o foco para a edição, isso não muda nada.
Então a questão é: como movo o cursor dentro do meu QTextEdit
?
Solução
Resolvi o problema se aprofundando nos documentos.
O textCursor()
função retorna um cópia de do cursor do QTextEdit
.Então, para modificar o real, setTextCursor()
deve ser usada a função:
QTextCursor tmpCursor = ui.translationInput->textCursor();
tmpCursor.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, 4);
ui.translationInput->setTextCursor(tmpCursor);