Получение совета по дизайну редактора Qt5 WYSIGWG - PullRequest
0 голосов
/ 05 августа 2020

Я планирую новое настольное приложение. Он предоставит редактор WYSIWYG для файлов HL7 (проект OSS). HL7 - это структурированный формат файлов, часто используемый больницами для обмена данными между системами.

Основная структура c формата состоит из записей, разделенных \r. Запись может иметь N полей, разделенных |. Само поле может быть разделено на компоненты ^ и подкомпоненты &, а поля могут повторяться ~ (аналогично массиву). Каждый тип сообщения имеет разное количество полей / компонентов и подкомпонентов. Пустые поля в конце записи можно опустить.

Пример простой записи: OBX|14|NM|0050–5^Calcium||8.9|mg/dl|8.4–10.4||||F

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

Также следует отметить, что я уже реализовал viewer , где структура документа отображается в формате QTreeView. В структуре используется QAbstractItemModel.

Теперь к моему актуальному вопросу: как мне подойти к проблеме наличия текстового редактора со структурированной моделью данных в Qt. Я провел небольшое исследование:

  • есть QDomDocument, похоже, он работает с данными xml. Я мог бы преобразовать свою структуру в XML, но можно ли использовать объект dom с текстовым редактором?
  • Есть ли способ привязать древовидную модель документа к QTextEdit или QPlainTextEdit?
  • возможно ли привязать QAbstractItemModel к документу в QTextEdit или QPlainTextEdit?

Что было бы наилучшим подходом к решению проблемы наличия текстового представления дерево, которое обновляется после изменения текста и / или структуры путем редактирования в текстовом поле?

Производительность и кроссплатформенность важны, поэтому этот проект будет реализован на C ++.

Спасибо за любые советы и примеры приветствуются, если они у вас есть.

-S

...