Я планирую новое настольное приложение. Он предоставит редактор 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