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