Возможно, я просто думаю об этом все неправильно, но мне кажется странным, что , чтобы иметь рабочую древовидную модель в Qt, нужно обернуть данные в класс предметов.Древовидные модели в Pyside
Во всех примерах, которые мне удалось найти, каждая модель, созданная для QTreeView, требовала реализации пользовательского класса Node или TreeItem (часто типа (объекта)). Это меня поражает по ряду причин:
a) Не все ли дело, что модель сможет напрямую извлекать данные? Класс Node или TreeItem выглядит как дополнительный багаж.
b) даже если для древовидного представления был необходим специальный класс item/node, почему бы этот класс не быть каким-то QObject? Большинство реализаций узла, которые я видел, имеют набор методов/атрибутов get/set parent/child; но похоже, что использование QObject будет иметь все, что уже встроено, так почему бы не использовать это?
Моя интуиция (что может быть неправильно) говорит мне, что если мы обнаружим, что нам нужен дополнительный класс Node для реализации древовидной модели, это из-за либо пробела в дизайне фреймворка Qt ..., либо непонимания Это.
Я смутно знаю QStandardItem и QStandardItemModel, но я спрашиваю, почему они являются частью QtGui, а не QtCore, так как другие модели & modelItems. Группировка этих классов с QtGui выглядит так: модель & смешивается. Тем не менее, я также не понимаю, почему они тоже находятся в QtGui, поскольку они не наследуются от каких-либо классов QtGui (они исходят из QtCore).
Если кто-нибудь может оправдать этот дизайн, объясните, как я его не понимаю, (или просто касаюсь моего разочарования). Я хотел бы услышать об этом!
Спасибо!
Это облегчение для прослушивания - мне кажется, что методы data/setData должны быть в состоянии предоставить данные напрямую. Тем не менее, мне трудно понять, что продемонстрировано где угодно, даже в официальных примерах Qt. Если бы вы могли обеспечить реализацию даже двухуровневой древовидной модели, которая бы очень помогла мне. Я знаю, что есть методы, которые мне нужно определить, например createIndex() & parent, но как они используются внутри (или при общении с представлением) кажутся немного непрозрачными. –
Возможно, с этим я больше всего сталкиваюсь, понимая поток операций и (как чувствует) круговую зависимость. Запрос данных передается индексом, и этот индекс поступает от createIndex(), которому передается строка, col, parent - и родительский элемент поступает из дочернего элемента с индексом, но этот индекс относится к родительскому объекту, - И я потерян. –