Название: Программно установить видимый курсор в QPlainTextEdit. Отправлено: Setner от Апрель 04, 2017, 07:27 Здравствуйте! Есть QPlainTextEdit с большим текстом. Нужно сделать навигацию по тексту(также как, например, работает функция Найти в текстовом редакторе). Покопавшись по форумам, и перепробовав все варианты, я так и не смог получить рабочий результат. Может быть кто-то сталкивался с подобной задачей и поделится опытом? На входе есть некое число - позиция, в которую следует перевести видимый курсор. Плюс к этому необходимо, чтобы скроллбары QPlainTextEdit также автоматически перемещались в нужные места. Задача вроде бы тривиальная, но, как оказалось, не всё так просто. Буду рад работающему примеру. Благодарю!
Название: Re: Программно установить видимый курсор в QPlainTextEdit. Отправлено: TheGringerEye от Апрель 04, 2017, 07:34 У QPlainTextEdit получаем QTextCursor через метод
Код: QTextCursor QPlainTextEdit::textCursor() const Код: void QTextCursor::setPosition(int pos, MoveMode m = MoveAnchor); http://doc.qt.io/qt-4.8/qtextcursor.html#setPosition Название: Re: Программно установить видимый курсор в QPlainTextEdit. Отправлено: Setner от Апрель 04, 2017, 08:26 У QPlainTextEdit получаем QTextCursor через метод Код: QTextCursor QPlainTextEdit::textCursor() const Цитировать QTextCursor QPlainTextEdit::textCursor() const Returns a copy of the QTextCursor that represents the currently visible cursor. Note that changes on the returned cursor do not affect QPlainTextEdit's cursor; use setTextCursor() to update the visible cursor. See also setTextCursor(). Я так понимаю это просто копия, не ссылка на сам курсор. После того, как это всё делаю, даже если я просто устанавливаю значение позиции курсора на 1, у меня поле ввода QPlainTextEdit становится недоступным для редактирования текста. Код: QTextCursor cursor; Название: Re: Программно установить видимый курсор в QPlainTextEdit. Отправлено: gil9red от Апрель 04, 2017, 15:38 Здравствуйте! Есть QPlainTextEdit с большим текстом. Нужно сделать навигацию по тексту(также как, например, работает функция Найти в текстовом редакторе). Покопавшись по форумам, и перепробовав все варианты, я так и не смог получить рабочий результат. Может быть кто-то сталкивался с подобной задачей и поделится опытом? На входе есть некое число - позиция, в которую следует перевести видимый курсор. Плюс к этому необходимо, чтобы скроллбары QPlainTextEdit также автоматически перемещались в нужные места. Задача вроде бы тривиальная, но, как оказалось, не всё так просто. Буду рад работающему примеру. Благодарю! Вы можете попробовать добавить к себе мой старый подпроект, который добавляет виджет для поиска и замены: https://github.com/gil9red/NotesManager/tree/master/FindAndReplace Насколько я помню, там подсветка найденного текста есть. там всю папку нужно скопировать в проект и подключать через pri файл (https://github.com/gil9red/NotesManager/blob/master/NotesManager.pro): Код
Сам проект вряд ли сможете собрать, но отдельные его классы / модули работающие Использование: Код
С QPlainTextEdit сразу не заработает -- разные предки у QTextEdit и QPlainTextEdit, но QTextEdit не хуже :) Название: Re: Программно установить видимый курсор в QPlainTextEdit. Отправлено: TheGringerEye от Апрель 04, 2017, 15:54 Цитировать После того, как это всё делаю, даже если я просто устанавливаю значение позиции курсора на 1, у меня поле ввода QPlainTextEdit становится недоступным для редактирования текста. Код: QTextCursor cursor; Так делать нельзя, так вы заменяете курсор у plainTextEdit на новый курсор, вам нужно получить старый. Код: QTextCursor cursor = ui->plainTextEdit->textCursor(); Название: Re: Программно установить видимый курсор в QPlainTextEdit. Отправлено: Setner от Апрель 04, 2017, 23:08 Вы можете попробовать добавить к себе мой старый подпроект, который добавляет виджет для поиска и замены. Благодарю за помощь! Код: QTextCursor cursor = ui->plainTextEdit->textCursor(); Добавил после вашего кода Код: ui->plainTextEdit->setFocus(); И всё заработало. Благодарю! Название: Re: Программно установить видимый курсор в QPlainTextEdit. Отправлено: TheGringerEye от Апрель 05, 2017, 01:18 Пожалуйста.
Так же в QPlainTextEdit есть методы по управлению выделением текста, так, что после поиска можно выделить нужный фрагмент и переставить курсор в его начало. |