Я новичок в 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, потому что приложение представляет собой настольное приложение, которому требуется независимость от платформы.