Перемещение курсора внутри QTextEdit

у меня есть форма с QTextEdit, которая называется translationInput. Я пытаюсь обеспечить функциональность редактирования для пользователя.

этой QTextEdit будет содержать текст в формате HTML. У меня есть набор кнопок, вроде "полужирный","Курсив", и так далее, которые должны добавить соответствующие теги в документ. Если кнопка нажата, когда текст не выбран, я просто хочу вставить пару тегов, например,<b></b>. Если текст выбран, Я хочу, чтобы теги появлялись слева и справа от него.

это прекрасно работает. Однако я также хочу, чтобы курсор был помещен перед закрывающим тегом после этого пользователь сможет продолжить ввод внутри тега new-added без необходимости перемещения курсора вручную. По умолчанию курсор отображается справа после новый добавленный текст (так в моем случае, сразу после закрывающего тега).

вот код, который у меня есть для Курсив:

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

однако последняя строка ничего не делает, курсор не перемещается, хотя movePosition() возвращает true, это означает, что все операции были успешно завершены.

я также пытался сделать это с QTextCursor::PreviousCharacter вместо QTextCursor::Left, и попытался передвинуть его до и после возвращения фокуса на редактирование, что ничего не меняется.

Итак, вопрос в том, как переместить курсор внутри моего QTextEdit?

1 ответов


решил проблему, копаясь глубже в документах.

на textCursor() функция возвращает скопировать курсора от QTextEdit. Итак, чтобы изменить фактический, необходимо:

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