Russian Qt Forum

Qt => Qt Quick => Тема начата: SektorCT от Март 26, 2024, 14:23



Название: Найти и выделить слово в TextArea
Отправлено: SektorCT от Март 26, 2024, 14:23
Всем привет.
Пытаюсь найти способ как слово которое надо найти в тексте расположенным в TextArea, найти и выделить.

Спасибо.


Название: Re: Найти и выделить слово в TextArea
Отправлено: SektorCT от Март 28, 2024, 11:48
Может кто подкинет идею как можно выделать в нем(TextArea) нужные слова?


Название: Re: Найти и выделить слово в TextArea
Отправлено: ssoft от Март 28, 2024, 14:39
TextArea отображает разметку html, выделяемые слова можно поместить в теги, определяющие формат выделения.


Название: Re: Найти и выделить слово в TextArea
Отправлено: Apktyc от Март 28, 2024, 16:29
TextArea наследник TextEdit, а для него есть QSyntaxHighlighter (https://doc.qt.io/qt-5/qsyntaxhighlighter.html)


Название: Re: Найти и выделить слово в TextArea
Отправлено: SektorCT от Апрель 05, 2024, 16:21
Нашел вариант, пробижаться по тексту и найти индекс начала и конца слова, и через метод select() с 2 аргументами выделить слово.
Но вот есдинственное что не могу найти, так это как отобразить ту область в тексте где найдено слово.
Как понимаю надо наверное перейти к курсору.
Может кто подсказать, вдруг имели опыт.


Название: Re: Найти и выделить слово в TextArea
Отправлено: SektorCT от Апрель 09, 2024, 17:34
TextArea наследник TextEdit, а для него есть QSyntaxHighlighter (https://doc.qt.io/qt-5/qsyntaxhighlighter.html)

А вы случайно не пробовали такой метод для выделения?
Получается выделить слово но вот как скрол заставить на позицию того слова перейти. это не срабатывает


Название: Re: Найти и выделить слово в TextArea
Отправлено: Apktyc от Апрель 09, 2024, 17:55
Так QSyntaxHighlighter именно для подсветки, дабы сразу подсветить во всем тексте искомую фразу (при этом не искажая формат текста).

С QML не работаю, но:

У QTextEdit есть document().
У QTextDocument есть find() возвращающий QTextCursor (с выделением искомого).
Дальше QTextEdit::setTextCursor, и на всякий случай есть QTextEdit::ensureCursorVisible(), который «scrolling the text edit if necessary».

Вижу так.


Название: Re: Найти и выделить слово в TextArea
Отправлено: SektorCT от Апрель 09, 2024, 20:57
Так QSyntaxHighlighter именно для подсветки, дабы сразу подсветить во всем тексте искомую фразу (при этом не искажая формат текста).

С QML не работаю, но:

У QTextEdit есть document().
У QTextDocument есть find() возвращающий QTextCursor (с выделением искомого).
Дальше QTextEdit::setTextCursor, и на всякий случай есть QTextEdit::ensureCursorVisible(), который «scrolling the text edit if necessary».

Вижу так.

Ну так у меня вопрос же касался Quick а не виджетов, и мне класс не нужен, и таких методов нету у меня дял применения.


Название: Re: Найти и выделить слово в TextArea
Отправлено: kambala от Апрель 10, 2024, 09:29
https://doc.qt.io/qt-6/qml-qtquick-controls-textarea.html#scrollable-textarea и дальше скроллить ScrollView айтем. Как я понимаю, прямоугольник для скролла можно получить через https://doc.qt.io/qt-6/qml-qtquick-textedit.html#positionToRectangle-method


Название: Re: Найти и выделить слово в TextArea
Отправлено: SektorCT от Апрель 10, 2024, 11:00
https://doc.qt.io/qt-6/qml-qtquick-controls-textarea.html#scrollable-textarea и дальше скроллить ScrollView айтем. Как я понимаю, прямоугольник для скролла можно получить через https://doc.qt.io/qt-6/qml-qtquick-textedit.html#positionToRectangle-method
Спасибо за совет, получилось сделать то что искал.


Название: Re: Найти и выделить слово в TextArea
Отправлено: Apktyc от Апрель 10, 2024, 14:20
Ну так у меня вопрос же касался Quick а не виджетов, и мне класс не нужен, и таких методов нету у меня дял применения.

Исходил из того, что QSyntaxHighlighter может сожрать QQuickTextDocument, и предполагал что остальные quick компоненты имеют идентичную функциональность. Не вышло.


Название: Re: Найти и выделить слово в TextArea
Отправлено: kambala от Апрель 10, 2024, 15:45
https://doc.qt.io/qt-6/qml-qtquick-controls-textarea.html#scrollable-textarea и дальше скроллить ScrollView айтем. Как я понимаю, прямоугольник для скролла можно получить через https://doc.qt.io/qt-6/qml-qtquick-textedit.html#positionToRectangle-method
Спасибо за совет, получилось сделать то что искал.
написал бы хоть решение :)