Это действительно проблема QAbstractItemView. Я пытаюсь решить эту проблему через некоторое время безуспешно. Моя проблема в том, что у меня есть дерево с числом узлов порядка миллионов. Я сделал несколько тестов для профиля QTreeView, и то, что я нашел, было немного шокирующим. Когда вы прокручиваете вниз в QTreeView, он продолжает вызывать QAbstractItemModel :: index () для каждого элемента, который уже показан.
Скажем, например, вы просматриваете 20 itens. Ожидалось, что по крайней мере 20 вызовов делают index (), но древовидное представление вызывает index () для all sibiling itens. Когда вы прокручиваете страницу вниз, она вызывает index () для всех снова и, возможно, более одного раза. Если вы наведите курсор мыши на элемент, он вызывает index (). Если вы моргнете, вызовет index () для каждого элемента.
Мой следующий шаг - проверить, как QTreeView (в моем случае) вызывает свою модель элементов, и попытаться реализовать собственную оптимизированную модель.