Пишу приложение с использованием Python, Qt5 и PySide. Делаю модель дерева с динамической подгрузкой (наследуюсь от QAbstractItemModel).
В принципе алгоритм действий прост - каждый узел по дефолту не грузит своих детей, а лишь имеет флаг loaded = False. Также мною переопределены canFetchMore (возвращает !loaded) и fetchMode (собственно, загружает данные и делает loaded = True).
Пока я не загрузил детей узла, я не знаю их количества и вообще есть ли они. Однако если rowCount возвращает ноль, то такой узел невозможно развернуть и соответственно реальные данные никогда подгружены не будут. Решение: возвращаем единицу, если loaded == False.
Теперь перед нами встаёт новая проблема. После разворачивания узла, у которого нет детей, значок с плюсиком никуда не девается (хотя rowCount уже возвращает 0 вместо 1) и это выглядит очень некрасиво.
Что делать в этом случае? Как дать QTreeView понять, что у узла нет детей на самом деле?
Пока я вижу решением только грузить на один уровень больше, чем нужно (тогда я буду знать есть дети у разворачиваемого узла или нет и никогда не буду возвращать фейковые значения). Но это как-то нерационально...