Имеется
рабочая реализация двухмерного графа сцены (Которая создаётся как более оптимизированная замена QGraphicsScene). Все элементы в ней индексированы с помощью алгоритма QuadTree (реализация Loose-Quadtree). Сцена способна хранить в себе больше миллиона различных элементов, и при обычном масштабе даёт близкую к нулю нагрузку на процессор при работе с элементами (выделение, перетаскивание, добавление элементов, прокручивание сцены, и т.п.). (То же количество элементов и те же операции в QGraphicsScene очень неоптимальны не зависимо от настроек индексирования и обновления отрисовки).
Однако, при сильном удалении масштаба, естественно, в поле зрения попадает значительно большее число элементов, чем обычно (примерно 20k~100k). И, соответственно, выделив 15-30 тысяч элементов из них, и, перетасивая их, появляются сильные лаги. Это очевидно, поскольку происходит одновременное обновление состояний всех 30k элементов, а также перерисовка всех остальных 100k (перерисовку можно будет оптимизировать выборочной отрисовкой по зонам).
Вопрос. Какие методы можно применить, чтобы боле-менее оптимизировать производительность работы со сценой при сильном удалении масштаба?
Конкретно, перетаскивание огромных групп элементов. Как вариант, хочу попробовать изобразить гигантскую группу выделенных элементов (например, больше 10k) в виде зонального прямоугольника, не выполняя само перемещение до момента отпускания кнопки мыши. Но думаю, может есть способы по лучше?