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

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

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

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

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

//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?

2 ответа

Решение

Решил проблему, углубившись в документы.

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

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

В PyQt (переместите курсор в конец документа):

      txt = QTextEdit()
txt.moveCursor(QTextCursor.End, QTextCursor.MoveAnchor)
Другие вопросы по тегам