Russian Qt Forum
Сентябрь 25, 2024, 15:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: текст. динамическая подстветка зон относящихся к примечанию.  (Прочитано 3840 раз)
Denjs
Гость
« : Апрель 13, 2011, 13:40 »

Господа товарищи, прошу помощи и пинка в направлении того, как делать следующую фичу:

Нужно сделать режим работы с текстом (текст с расширенным html-форматированием), похожий на "рецензирование".

______________________________________
Сценарий работы примерно таков:

Есть исходный текст, и список примечаний (изначальный или пополняемый)

Оператор выделяет часть текста, и относит его к определенному "примечанию" (например для простоты - "типовая ошибка номер 3").

К одному примечанию может быть отнесено несколько участков текста. ( у нас же может быть несколько мест в которых мы допустили ошибки одного типа ).

Отнесенный к примечанию текст, выделается, но "неброско" (скажем изменением цвета).

При нажатии на такой выбеленный текст, выделяется строка в списке примечаний (отображается примечание) и подсвечиваются (уже так, "что бы бросалось в глаза") все куски текста что относятся к этому-же примечанию.

Аналогично происходит и при выборе примечания - в тексте подсвечиваются все места, отнесенные к данному примечанию.

Необходимое требование - что бы при правке текста, система не "теряла" привязки к тексту... т.е. вставили кусок текста, зоны отнесенные к примечанию сдвинулись, и надо, что бы эти сдвинутые зоны корректно отображалось при подсветке того, что относится к нужному нам примечанию.
______________________________________

Вопрос - как, и какими механизмами это делать.

Пока я думал в направлении QTextEdit или QTextBrowser - при определении куска текста относящегося к примечанию - обрамлять заданную область тегом <a> (оно и смещаться будет как надо автоматически, и саму зону примечения можно подправить);

Указанный тег <а> относить к стилю который определен специально "для данного примечания".

Для выделения текста - планировал изменить стиль примечания - и ждал что оно по всему тексту будет отображаться по новому. Но эти компоненты не поддерживают стилей в полном их виде. При вставке туда HTML-а, он модифицируется на более простые разрозненные конструкции, и в итоге- глобальная замена стиля отображения становится невозможной.

В общем в итоге пока я запнулся, и не знаю куда рыть дальше...

Есть компонент поддерживающий правку текста, но с нормальной поддержкой html ? )))
или надо ещё как делать?
« Последнее редактирование: Апрель 14, 2011, 00:00 от Denjs » Записан
blood_shadow
Гость
« Ответ #1 : Апрель 13, 2011, 14:32 »

я делал редактируемый отчет в хтмл, текст-едита мало он хавает не полностью хтмл 4.0
использовал QWebView - поддерживает полностью 4.0 и редактирование
Записан
Denjs
Гость
« Ответ #2 : Апрель 13, 2011, 15:30 »

я делал редактируемый отчет в хтмл, текст-едита мало он хавает не полностью хтмл 4.0
использовал QWebView - поддерживает полностью 4.0 и редактирование
QWebView поддерживает редактирование?! т.е. я могу его настроить так чтобы поставить туда курсор и что-то впечатать руками - QWebView как QTextEdit? можно подробнее рассказать?

то что я могу динамически поменять его содержимое и тегов программно - это понятно, но что делать если оператору надо "впечатать пару строк" непосредственно в отображенный текст?
Записан
blood_shadow
Гость
« Ответ #3 : Апрель 13, 2011, 16:03 »

QWebView поддерживает редактирование?! т.е. я могу его настроить так чтобы поставить туда курсор и что-то впечатать руками - QWebView как QTextEdit? можно подробнее рассказать?
это - нефиг делать, только надо строить хтмл таблицу, и ограничение что эта таблица
будет фиксированного количества колонок/столбиков, то есть контент менять можно но
саму таблицу нет, плюс нельзя использовать свойство float: left, так как будет сильно
тормозить, например:
Код
C++ (Qt)
wView = new QWebView;
wView->page()->setContentEditable(true);
wView->setHtml(htmlString);
 
Записан
Denjs
Гость
« Ответ #4 : Апрель 13, 2011, 21:15 »

 Шокированный Веселый  Улыбающийся
блин! ну нифига себе)))  нереально круто. Серьезно. Спасибо.

Я признаться, вообще даже помыслить не смел что QWebView (браузер типа) можно использовать как текстовой редактор )))
Причем у меня без всяких "хтмл таблиц" "поперло", и "от рождения" работают [Ctrl+B] [Ctrl+I] при правке текста ))).

Игры с динамической подменой стилей прокатывают (стоит переписать описание стиля в исходнике - и все сразу применяется во всей странице), теперь осталось только с выделениями и т.п. разобраться и будет вообще все круто)))

Кстати - никто не знает - как у QWebView найти в html-исходнике позицию, соответствующую текущей позиции курсора? (или границе выделения, если угодно).
Мне перед изменением выделенного на страницу теста, надо проанализировать html-исходник под выделением - что бы при вставке того-же <a> не порушить существующую структуру страницы. (например, что бы не получилось "<a>...<a>...</a>...</a>")

ну или как с QWebView слелать фичу "просомтр исходника выделеного фрагмента"? ( как в FireFox ) ?

« Последнее редактирование: Апрель 13, 2011, 21:33 от Denjs » Записан
voral
Гость
« Ответ #5 : Апрель 14, 2011, 08:07 »

Один из вариантов решения использовать QSyntaxHighlighter.

А в тексте можно использовать либо собственные теги (по сути браузер их будет пропускать и их видно не будет), но вам лучше использовать специально именованные  якоря - это удобно для позиционирования. Т.е. текст (точнее его код) будет примерно так
Код:
<a name="beginTextMark1" /> Здесь идет текст относящийся к примечанию 1<a name="endTextMark1" />  дугой какой-то текст <a name="beginTextMark2" /> Здесь идет текст относящийся к примечанию 1<a name="endTextMark2" />
Т.е. вам остается зарядить регексп подсветки синтаксиса на выделение блока от begin... до end...
(тут, кстати можно придумать зависимость цвета выделения от id- примечания). Когда вам нужно будет вернуть курсор в исходное положение (точнее на начало блока с которого ушли, чтоб почитать заметку) вам надо будет просто осуществить переход на по url = #beginTextMark1.

Ну или, если вам нужно не в начало блока, а именно в ту же самую позицию, то перед "переключением"/редактированием в позицию курсора воткнуть нечто типа <a name="ankorForReturn" />

Записан
Denjs
Гость
« Ответ #6 : Апрель 14, 2011, 14:13 »

Один из вариантов решения использовать QSyntaxHighlighter.
...
Ну если не использовать QWebView .... но мне кажется что QTextEdit не позволит включать в себя произвольные теги...
Ну это уже дело десятое...

сейчас с QWebView проблема: необходимо сопоставить выделение (которое мы курсором сделали) и html-ки под ним лежащей...

Сейчас я наткнулся на то, что у QWebView нет механизма а-ля "текстовогоКурсора" (как у QTextEdit) - и в итоге я не имею полноценного доступа к выделению - только к тексту выделенному, но никак не к html-исходнику под ним лежащему. (мне же надо вставить собственные теги так, что бы они обрамляли выделенный кусок текста - а для этого надо понять как визуальное выделение "ложится" на html-исходник).

В общем мне почему-то кажется что придется или использовать "родной" WebKit, или ковырять исходники Qt (что попахивает несколько дурноватым тоном...). Думаю я так потому, что у самого webKit кроде как есть возможность работы с неким "DomDocument", который веб-кит способен отдать как относящийся к текущему выделению - и таким образом можно сделать фичу типа "показать исходник для выделенной области"...
но c QWebView никого подобия типа отдать DomDocument для выделения - нет... - видимо в портах веб-кита для Qt таких структур нет, или их решили не делать... вот и надо будет или вытаскивать их из недр QWebView с помощью какого хака или работать с оригинальным веб-кит...

У кого есть какие мысли о том, что с этим всем делать?
« Последнее редактирование: Апрель 14, 2011, 14:18 от Denjs » Записан
voral
Гость
« Ответ #7 : Апрель 14, 2011, 15:38 »

Один из вариантов решения использовать QSyntaxHighlighter.
...
Ну если не использовать QWebView .... но мне кажется что QTextEdit не позволит включать в себя произвольные теги...
Ну это уже дело десятое...

Код:
QTextEdit *edit = new  QTextEdit ("<a name=\"test\"/> Test<mytag>",this);


Отображается только "Test".Но вот в  QSyntaxHighlighter лезет только текст без тегов Грустный
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.065 секунд. Запросов: 21.