У меня есть пользовательская древовидная модель с множеством элементов. Он имеет более 1000000 предметов на первом уровне ниже верхнего уровня. Когда я расширяю этот уровень в QTreeView
, он вызывает model.hasChildren()
для каждого из этих элементов, даже если элементы не видны (вам нужно прокрутить вниз, вниз, вниз ..., чтобы сделать их видимыми). Проблема в том, что моя функция hasChildren()
занимает некоторое время, особенно когда вызывается миллион раз (занимает около 10 секунд - в PySide/PyQt). Мои вопросы:QTreeView вызывает QAbstractItemModel :: hasChildren() даже для невидимых элементов
1) Я понимаю, что hasChildren()
вызывается для видимых элементов, потому что он должен знать, должен ли элемент расширяться (если он имеет детей) или нет. Но почему он вызван для невидимых предметов (я имею в виду те, которые не находятся внутри видимого диапазона и становятся видимыми только после прокрутки)? На мой взгляд, это должно быть вызвано только тогда, когда элемент станет видимым. Я что-то пропустил?
2) Как обойти эту проблему?
Прочитайте раздел «Ленивое население данных модели» в [Подклассу подклассы модели] (https://doc.qt.io/qt-4.8/model-view-programming.html#model-subclassing-reference) ? – ekhumoro