Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ QTextEdit и подсветка предложения.

Автор: hkarel 8.11.2010, 17:13

Здравствуйте.
Имеется произвольный текст. Текст может содержать несколько абзацев. В абзаце может быть несколько предложений.
Задача состоит в том, чтобы при перемещении курсора мыши над участками текста подсвечивалось предложение над которым находится курсор. Так же необходимо "понимать" какое предложение подсвечено, т.е. получать текст этого предложения, или любой адекватный идентификатор.
Если говорить об аналогиях, то переведенный текст (несколько предложений) на странице гугл-переводчика как раз реализуют заданное поведение.
В качестве реализации необязательно использовать QTextEdit, возможен любой наиболее подходящий компонент.
Надеюсь на советы опытных разработчиков!

Автор: panter_dsd 8.11.2010, 17:37

Почитай про QSyntaxHighlighter.

Автор: Litkevich Yuriy 8.11.2010, 23:18

Цитата(panter_dsd @ 8.11.2010, 20:37) *
Почитай про QSyntaxHighlighter.
что-то я сомневаюсь, что он подойдёт

Автор: hkarel 9.11.2010, 11:43

Цитата(panter_dsd @ 8.11.2010, 18:37) *
Почитай про QSyntaxHighlighter.

Почитал. В принципе это могло бы подойти, но у меня имеется еще и динамическая составляющая - передвижение курсора мыши, так же есть подозрение, что QSyntaxHighlighter не позволит получить общее решение - об этом ниже.

Подробнее о задаче: программа выполняет перевод текста при помощи гугл-сервиса переводов. На входе у меня есть абзац состоящий из нескольких предложений. "Кормим" его серверу, в ответ получаем список пар предложений из этого абзаца. Каждая пара представляет оригинал-перевод. Если бы мы всегда получали русскоязычный перевод, то можно было бы определять границы предложения по первой заглавной букве и точке в конце предложения. Вариант решения - так себе, но какой есть... В общем же случае такое решение неприемлемо - предположим, что переводить будем на китайский... Вот если бы в начало и конец предложения можно было бы вставлять некие маркеры, по которым можно было бы определять область подсветки. Возможно это могли бы быть какие-то непечатаемые символы или, возможно, текст разграничить какими-то html-тегами. Это только идея, как реализовать это технически я пока не понимаю. Поэтому моя просьба о советах остается актуальной.

Автор: molchanoviv 10.11.2010, 10:50

На русском языке это сделать не сложно вясняем позицию курсора мыши QCurosr::pos() затем с помощью QTextEdit::cursorForPosition(const QPoint & pos) получаем QTextCursor и вычленяем нужное предложение. От начала текста до точки, от точки до точки или от точки до конца текста. Кстати не в курсе как в китайском тексте а в японском точка обозначается как "。", так-что я думаю и в Китайском что-то такое есть. Составишь пару регулярок для отсечения текста до позиции курсора и после и укажешь в них в качестве разделителя (.|。|что-то еще).

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)