Я новичок в QT и пытаюсь найти лучшие способы создания виджета WYSIWYG-редактора для пользовательского языка разметки, который отображает простой текст, изображения и ссылки. Мне нужно иметь возможность распространять изменения из редактора WYSIWYG в пользовательское представление разметки.
В качестве конкретного примера проблемной области представьте, что в пользовательской разметке может быть тег «player», который содержит имя игрока и название команды. Разметка может выглядеть так:
Last week, <player id="1234"><name>Aaron Rodgers</name><team>Packers</team></player> threw a pass.
Этот текст будет отображаться в редакторе как:
На прошлой неделе Аарон Роджерс из Пакеров бросил пас.
Имя игрока и название команды могут редактироваться непосредственно в редакторе стандартным способом WYSIWYG, так что моим пользователям не нужно изучать какую-либо разметку. Кроме того, когда имя игрока наведено, появится всплывающее окно с информацией об этом игроке и аналогично команде.
С этим длинным вступлением я пытаюсь понять, с чего начать с QT. Кажется, что наиболее логичным вариантом будет Rich Text API, использующий QTextDocument. Этот подход кажется далеко не идеальным, учитывая ограничения QTextDocument:
- Я не могу понять, как захватывать навигационные события, нажимая на ссылки.
- Следующие ссылки при клике, по-видимому, включаются только тогда, когда QTextEdit доступен только для чтения.
- Пользовательские объекты, которые реализуют QTextObjectInterface, игнорируются в операциях копирования и вставки
- Любая основанная на HTML разметка, которая передается ему как Rich Text, ретранслируется в серию тегов span и множество других нежелательных элементов, что делает чрезвычайно трудным распространение изменений из редактора обратно в исходную пользовательскую разметку.
Второй вариант - QWebKit, который позволяет редактировать в реальном времени разметку HTML5, поэтому я могу указать двусторонний перевод между пользовательской разметкой и HTML5. Мне не ясно, как можно передавать изменения из редактора обратно в исходную разметку в режиме реального времени без повторного перевода всего документа при каждом изменении текста. Решения QWebKit для меня выглядят ужасно громоздкими (изучение WebKit вместе с QT), что должно быть относительно простой задачей.
Я также рассмотрел возможность реализации WYSIWYG с пользовательским классом, используя собственные контейнеры QT, метки, изображения и другие виджеты вручную. Это кажется наиболее гибким подходом, который, скорее всего, не столкнется с неразрешимыми проблемами. Однако я вполне уверен, что реализация всех деталей обычного текстового редактора (выбор текста, изменение шрифта, поддержка вырезания и вставки, отмена / повтор, перетаскивание объектов, размещение курсора и т. Д.) Будет невероятно трудоемкой .
Итак, наконец, мой вопрос: есть ли гуру QT с некоторыми советами о том, с чего начать этот проект?
Кстати, я использую QT, потому что это настольное приложение, которое требует независимости от платформы.