Использование QT для создания редактора WYSIWYG для пользовательского языка разметки

Я новичок в QT и пытаюсь найти лучшие способы создания виджета редактора WYSIWYG для настраиваемого языка разметки, который отображает простой текст, изображения и ссылки. Мне нужно иметь возможность распространять изменения из редактора WYSIWYG на пользовательское представление разметки.

В качестве конкретного примера проблемной области представьте, что в настраиваемой разметке может быть тег «player», который содержит имя игрока и название команды. Разметка может выглядеть так:

Last week, <player id="1234"><name>Aaron Rodgers</name><team>Packers</team></player> threw a pass.
Этот текст будет отображаться в редакторе как:

На прошлой неделе Аарон Роджерс из Packers бросил пас.

Имя игрока и название команды можно будет редактировать прямо в редакторе стандартным способом WYSIWYG, так что моим пользователям не нужно изучать какую-либо разметку. Кроме того, если навести курсор мыши на имя игрока, появится всплывающее окно с подробностями об этом игроке, а также о команде.

С этим длинным вступлением я пытаюсь понять, с чего начать с QT. Кажется, что наиболее логичным вариантом будет Rich Text API с использованием QTextDocument. Этот подход кажется далеко не идеальным, учитывая ограничения QTextDocument:

  • Я не могу понять, как фиксировать события навигации при нажатии на ссылки.
  • Похоже, что переход по ссылкам при щелчке доступен только тогда, когда QTextEdit доступен только для чтения.
  • Пользовательские объекты, реализующие QTextObjectInterface, игнорируются в операциях копирования и вставки.
  • Любая разметка на основе HTML, которая передается ему как Rich Text, повторно переводится в серию тегов span и множество другого мусора, что чрезвычайно затрудняет распространение изменений из редактора обратно в исходную настраиваемую разметку.

Второй вариант - QWebKit, который позволяет редактировать разметку HTML5 в реальном времени, поэтому я могу указать двусторонний перевод между пользовательской разметкой и HTML5. Я не понимаю, как можно распространить изменения из редактора обратно в исходную разметку в реальном времени без повторного перевода всего документа при каждом изменении текста. Решения QWebKit кажутся мне ужасно громоздкими (изучение WebKit вместе с QT) по сравнению с относительно простой проблемой.

Я также рассмотрел возможность реализации WYSIWYG с настраиваемым классом с использованием собственных контейнеров QT, меток, изображений и других виджетов вручную. Это кажется наиболее гибким подходом, который, скорее всего, не приведет к неразрешимым проблемам. Однако я почти уверен, что реализация всех деталей обычного текстового редактора (выбор текста, изменение шрифта, поддержка вырезания и вставки, отмена / повтор, перетаскивание объектов, размещение курсора и т. Д.) Займет невероятно много времени. .

Итак, наконец, мой вопрос: есть ли какие-нибудь гуру QT, которые могут посоветовать, с чего начать работу с такого рода проектами?

Кстати, я использую QT, потому что приложение представляет собой настольное приложение, которому требуется независимость от платформы.


person Aaron    schedule 09.03.2010    source источник


Ответы (1)


Учитывая, что у меня здесь нет советов, я решил использовать подход QTextEdit, хотя на самом деле я использую QTextBrowser, который настроен на редактирование, чтобы я мог фиксировать события навигации по ссылкам. Я буду использовать QTextCharFormat с именами ссылок, установленными на уникальные идентификаторы, чтобы преобразовать QTextEdit обратно в пользовательскую разметку. QTextEdit уже поддерживает изображения, так что мне не придется с ними разбираться.

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

person Aaron    schedule 19.06.2010