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?

Foi útil?

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top