Рекомендация: QDataWidgetMapper для вложенных виджетов или расширение QAbstractItemView с делегатами
Мои данные загружаются из файла XML и, безусловно, являются иерархическими. Адаптация данных для работы с каркасом Model/View в Qt кажется простой. Однако узлы XML не являются примитивными объектами, такими как числа или строки. Мне нравится отображать данные, похожие на пример Simple Widget Mapper. У меня есть форма с некоторыми метками, текстовое поле, кнопки, возможно, флажки. Кроме того, элементы в иерархическом представлении можно выбрать (например, установить флажки), удалить (кнопка закрытия), отредактировать (кнопка редактирования), перетащить и отпустить. Перетаскивание используется для управления (вставка, перемещение, копирование) иерархии. Какова лучшая практика?
Пока я вижу три варианта:
Используйте QDataWidgetMapper с вложенными виджетами:
Атрибуты узла XML перечислены в одной строке. Для каждого узла QDataWidgetMapper связан с этой строкой. QDataWidgetMapper синхронизирует поля виджета с соответствующими значениями узла. Все события, перетаскивание, выделение,... должны обрабатываться виджетами. Виджеты предоставляют выпадающие контейнеры. Вложенные виджеты представляют иерархию данных.
Реализуйте пользовательский QAbstractItemView и используйте делегаты:
Я стремлюсь к чему-то вроде диаграммы Насси-Шнейдермана. Следовательно, стандартный QTreeView не может быть применен. Однако должно быть возможно создать базовую иерархическую структуру, наследующую QAbstractItemView. Пользовательский делегат используется для рисования данных XML с помощью виджетов форм и создания редакторов. QAbstractItemView отвечает за перетаскивание, управление моделью выбора, (каким-то образом) прослушивание событий кнопок, чтобы удалить элементы из иерархии, и запросить у редактора делегата.
Что-то еще:
Я далек от того, чтобы быть гуру Qt. Я приветствую предложения.
Какой вариант рекомендуется? Какой вариант вы считаете менее болезненным?
РЕДАКТИРОВАТЬ - 21 февраля: Кто-нибудь знает, как реализован Qt Designer? Это в значительной степени то, что я ищу. Как и в Qt Designer, у меня есть элементы (циклы, условия, действия, ...), и я люблю редактировать иерархические процессы. Некоторые элементы являются контейнерами, другие - листьями. Некоторые элементы структурированы горизонтально, другие - вертикально. Является ли Qt Designer QGraphicsScene?
Спасибо за вашу помощь и предложения, Мариан