Есть ли в моем коде ошибка при заполнении QTreeView?

StackOverflow https://stackoverflow.com/questions/1185021

  •  19-09-2019
  •  | 
  •  

Вопрос

Я использую PyQt 4.4.

Лучше всего это показать с помощью нескольких фотографий.Все узлы должны иметь листья от 0 до 99.Они постепенно загружаются с помощью canFetchMore() и fetchMore().Но по какой-то неизвестной мне причине это работает только для корневого узла.(Изображение 1)

Если я сверну и разверну узел, он загрузит еще 10 значений.(Изображение 2 и 3)

Также странно, что он загружает 10 значений, поскольку код загружает только 5 за вызов fetchMore(), что означает, что он вызывается 2 раза, прежде чем код перестанет загружать дополнительные данные.

Screenshot 1 Screenshot 2 Screenshot 3

Я написал небольшой пример, чтобы продемонстрировать проблему, просто запустите его с помощью python test.py. http://snipt.org/lLh

Кто-нибудь знает, что вызывает эту ошибку?

Это было полезно?

Решение

Я просмотрел исходный код Qt (v4.5, хотя я не ожидаю большой разницы между v4.4 и v4.5) для QAbstractItemView и QTreeView, и я не думаю, что они поддерживают инкрементную отложенную загрузку дочерних узлов.

QAbstractItemView не имеет понятия о деревьях, поэтому он только вызывает fetchMore() на самом верхнем индексе.Он вызывает fetchMore() когда:

  • Геометрия обновлена
  • Полосы прокрутки перемещаются
  • Строки вставлены
  • Текущий элемент изменяется в результате операции перетаскивания с автоматической прокруткой.

QTreeView дополнительно вызывает fetchMore() когда:

  • Элемент развернут (по сути, это единственный раз, когда он вызывает fetchMore() с некорневым индексом)
  • Макет представления необходимо изменить, например, с помощью expandAll() и collapseAll()

Я думаю, что лучшим решением было бы создать подкласс QTreeView, чтобы он вызывал fetchMore() в соответствующих местах и ​​с соответствующими индексами.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top