Рекомендация: QDataWidgetMapper для вложенных виджетов или расширение QAbstractItemView с делегатами

Мои данные загружаются из файла XML и, безусловно, являются иерархическими. Адаптация данных для работы с каркасом Model/View в Qt кажется простой. Однако узлы XML не являются примитивными объектами, такими как числа или строки. Мне нравится отображать данные, похожие на пример Simple Widget Mapper. У меня есть форма с некоторыми метками, текстовое поле, кнопки, возможно, флажки. Кроме того, элементы в иерархическом представлении можно выбрать (например, установить флажки), удалить (кнопка закрытия), отредактировать (кнопка редактирования), перетащить и отпустить. Перетаскивание используется для управления (вставка, перемещение, копирование) иерархии. Какова лучшая практика?

Пока я вижу три варианта:

  1. Используйте QDataWidgetMapper с вложенными виджетами:

    Атрибуты узла XML перечислены в одной строке. Для каждого узла QDataWidgetMapper связан с этой строкой. QDataWidgetMapper синхронизирует поля виджета с соответствующими значениями узла. Все события, перетаскивание, выделение,... должны обрабатываться виджетами. Виджеты предоставляют выпадающие контейнеры. Вложенные виджеты представляют иерархию данных.

  2. Реализуйте пользовательский QAbstractItemView и используйте делегаты:

    Я стремлюсь к чему-то вроде диаграммы Насси-Шнейдермана. Следовательно, стандартный QTreeView не может быть применен. Однако должно быть возможно создать базовую иерархическую структуру, наследующую QAbstractItemView. Пользовательский делегат используется для рисования данных XML с помощью виджетов форм и создания редакторов. QAbstractItemView отвечает за перетаскивание, управление моделью выбора, (каким-то образом) прослушивание событий кнопок, чтобы удалить элементы из иерархии, и запросить у редактора делегата.

  3. Что-то еще:

    Я далек от того, чтобы быть гуру Qt. Я приветствую предложения.

Какой вариант рекомендуется? Какой вариант вы считаете менее болезненным?

РЕДАКТИРОВАТЬ - 21 февраля: Кто-нибудь знает, как реализован Qt Designer? Это в значительной степени то, что я ищу. Как и в Qt Designer, у меня есть элементы (циклы, условия, действия, ...), и я люблю редактировать иерархические процессы. Некоторые элементы являются контейнерами, другие - листьями. Некоторые элементы структурированы горизонтально, другие - вертикально. Является ли Qt Designer QGraphicsScene?

Спасибо за вашу помощь и предложения, Мариан

0 ответов

Другие вопросы по тегам