Название: текст. динамическая подстветка зон относящихся к примечанию. Отправлено: Denjs от Апрель 13, 2011, 13:40 Господа товарищи, прошу помощи и пинка в направлении того, как делать следующую фичу:
Нужно сделать режим работы с текстом (текст с расширенным html-форматированием), похожий на "рецензирование". ______________________________________ Сценарий работы примерно таков: Есть исходный текст, и список примечаний (изначальный или пополняемый) Оператор выделяет часть текста, и относит его к определенному "примечанию" (например для простоты - "типовая ошибка номер 3"). К одному примечанию может быть отнесено несколько участков текста. ( у нас же может быть несколько мест в которых мы допустили ошибки одного типа ). Отнесенный к примечанию текст, выделается, но "неброско" (скажем изменением цвета). При нажатии на такой выбеленный текст, выделяется строка в списке примечаний (отображается примечание) и подсвечиваются (уже так, "что бы бросалось в глаза") все куски текста что относятся к этому-же примечанию. Аналогично происходит и при выборе примечания - в тексте подсвечиваются все места, отнесенные к данному примечанию. Необходимое требование - что бы при правке текста, система не "теряла" привязки к тексту... т.е. вставили кусок текста, зоны отнесенные к примечанию сдвинулись, и надо, что бы эти сдвинутые зоны корректно отображалось при подсветке того, что относится к нужному нам примечанию. ______________________________________ Вопрос - как, и какими механизмами это делать. Пока я думал в направлении QTextEdit или QTextBrowser - при определении куска текста относящегося к примечанию - обрамлять заданную область тегом <a> (оно и смещаться будет как надо автоматически, и саму зону примечения можно подправить); Указанный тег <а> относить к стилю который определен специально "для данного примечания". Для выделения текста - планировал изменить стиль примечания - и ждал что оно по всему тексту будет отображаться по новому. Но эти компоненты не поддерживают стилей в полном их виде. При вставке туда HTML-а, он модифицируется на более простые разрозненные конструкции, и в итоге- глобальная замена стиля отображения становится невозможной. В общем в итоге пока я запнулся, и не знаю куда рыть дальше... Есть компонент поддерживающий правку текста, но с нормальной поддержкой html ? ))) или надо ещё как делать? Название: Re: текст. динамическая подстветка зон относящихся к примечанию. Отправлено: blood_shadow от Апрель 13, 2011, 14:32 я делал редактируемый отчет в хтмл, текст-едита мало он хавает не полностью хтмл 4.0
использовал QWebView - поддерживает полностью 4.0 и редактирование Название: Re: текст. динамическая подстветка зон относящихся к примечанию. Отправлено: Denjs от Апрель 13, 2011, 15:30 я делал редактируемый отчет в хтмл, текст-едита мало он хавает не полностью хтмл 4.0 QWebView поддерживает редактирование?! т.е. я могу его настроить так чтобы поставить туда курсор и что-то впечатать руками - QWebView как QTextEdit? можно подробнее рассказать? использовал QWebView - поддерживает полностью 4.0 и редактирование то что я могу динамически поменять его содержимое и тегов программно - это понятно, но что делать если оператору надо "впечатать пару строк" непосредственно в отображенный текст? Название: Re: текст. динамическая подстветка зон относящихся к примечанию. Отправлено: blood_shadow от Апрель 13, 2011, 16:03 QWebView поддерживает редактирование?! т.е. я могу его настроить так чтобы поставить туда курсор и что-то впечатать руками - QWebView как QTextEdit? можно подробнее рассказать? это - нефиг делать, только надо строить хтмл таблицу, и ограничение что эта таблицабудет фиксированного количества колонок/столбиков, то есть контент менять можно но саму таблицу нет, плюс нельзя использовать свойство float: left, так как будет сильно тормозить, например: Код
Название: Re: текст. динамическая подстветка зон относящихся к примечанию. Отправлено: Denjs от Апрель 13, 2011, 21:15 :o :D :)
блин! ну нифига себе))) нереально круто. Серьезно. Спасибо. Я признаться, вообще даже помыслить не смел что QWebView (браузер типа) можно использовать как текстовой редактор ))) Причем у меня без всяких "хтмл таблиц" "поперло", и "от рождения" работают [Ctrl+B] [Ctrl+I] при правке текста ))). Игры с динамической подменой стилей прокатывают (стоит переписать описание стиля в исходнике - и все сразу применяется во всей странице), теперь осталось только с выделениями и т.п. разобраться и будет вообще все круто))) Кстати - никто не знает - как у QWebView найти в html-исходнике позицию, соответствующую текущей позиции курсора? (или границе выделения, если угодно). Мне перед изменением выделенного на страницу теста, надо проанализировать html-исходник под выделением - что бы при вставке того-же <a> не порушить существующую структуру страницы. (например, что бы не получилось "<a>...<a>...</a>...</a>") ну или как с QWebView слелать фичу "просомтр исходника выделеного фрагмента"? ( как в FireFox ) ? Название: Re: текст. динамическая подстветка зон относящихся к примечанию. Отправлено: voral от Апрель 14, 2011, 08:07 Один из вариантов решения использовать QSyntaxHighlighter.
А в тексте можно использовать либо собственные теги (по сути браузер их будет пропускать и их видно не будет), но вам лучше использовать специально именованные якоря - это удобно для позиционирования. Т.е. текст (точнее его код) будет примерно так Код: <a name="beginTextMark1" /> Здесь идет текст относящийся к примечанию 1<a name="endTextMark1" /> дугой какой-то текст <a name="beginTextMark2" /> Здесь идет текст относящийся к примечанию 1<a name="endTextMark2" /> (тут, кстати можно придумать зависимость цвета выделения от id- примечания). Когда вам нужно будет вернуть курсор в исходное положение (точнее на начало блока с которого ушли, чтоб почитать заметку) вам надо будет просто осуществить переход на по url = #beginTextMark1. Ну или, если вам нужно не в начало блока, а именно в ту же самую позицию, то перед "переключением"/редактированием в позицию курсора воткнуть нечто типа <a name="ankorForReturn" /> Название: Re: текст. динамическая подстветка зон относящихся к примечанию. Отправлено: Denjs от Апрель 14, 2011, 14:13 Один из вариантов решения использовать QSyntaxHighlighter. Ну если не использовать QWebView .... но мне кажется что QTextEdit не позволит включать в себя произвольные теги... ... Ну это уже дело десятое... сейчас с QWebView проблема: необходимо сопоставить выделение (которое мы курсором сделали) и html-ки под ним лежащей... Сейчас я наткнулся на то, что у QWebView нет механизма а-ля "текстовогоКурсора" (как у QTextEdit) - и в итоге я не имею полноценного доступа к выделению - только к тексту выделенному, но никак не к html-исходнику под ним лежащему. (мне же надо вставить собственные теги так, что бы они обрамляли выделенный кусок текста - а для этого надо понять как визуальное выделение "ложится" на html-исходник). В общем мне почему-то кажется что придется или использовать "родной" WebKit, или ковырять исходники Qt (что попахивает несколько дурноватым тоном...). Думаю я так потому, что у самого webKit кроде как есть возможность работы с неким "DomDocument", который веб-кит способен отдать как относящийся к текущему выделению - и таким образом можно сделать фичу типа "показать исходник для выделенной области"... но c QWebView никого подобия типа отдать DomDocument для выделения - нет... - видимо в портах веб-кита для Qt таких структур нет, или их решили не делать... вот и надо будет или вытаскивать их из недр QWebView с помощью какого хака или работать с оригинальным веб-кит... У кого есть какие мысли о том, что с этим всем делать? Название: Re: текст. динамическая подстветка зон относящихся к примечанию. Отправлено: voral от Апрель 14, 2011, 15:38 Один из вариантов решения использовать QSyntaxHighlighter. Ну если не использовать QWebView .... но мне кажется что QTextEdit не позволит включать в себя произвольные теги... ... Ну это уже дело десятое... Код: QTextEdit *edit = new QTextEdit ("<a name=\"test\"/> Test<mytag>",this); Отображается только "Test".Но вот в QSyntaxHighlighter лезет только текст без тегов :( |