Перемещение курсора внутри 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)