С помощью приведенного ниже фрагмента кода я создаю сцену с 100 000 прямоугольников.
Производительность в порядке; представление отвечает без задержек.
QGraphicsScene * scene = new QGraphicsScene;
for (int y = -50000; y < 50000; y++) {
scene->addRect(0, y * 25, 40, 20);
}
...
view->setScene(scene);
А теперь второй фрагмент отстой
for (int y = 0; y < 100000; y++) {
scene->addRect(0, y * 25, 40, 20);
}
Для 1-й половины элементов сцены вид задерживается, чтобы реагировать на события мыши и клавиши, а для другой половины это нормально?!?
Предыдущая сцена имеет sceneRect (x, y, w, h) = (0, -1250000, 40, 2499995).
Последняя сцена имеет sceneRect (x, y, w, h) = (0, 0, 40, 2499995).
Я не знаю, почему sceneRect влияет на производительность, поскольку индекс BSP основан на относительных координатах элемента.
Я что-то упустил? Я не нашел никакой информации в документации,
плюс демо Qt 40000 Chips также распределяет элементы вокруг (0, 0), не объясняя причину этого выбора.
// Populate scene
int xx = 0;
int nitems = 0;
for (int i = -11000; i < 11000; i += 110) {
++xx;
int yy = 0;
for (int j = -7000; j < 7000; j += 70) {
++yy;
qreal x = (i + 11000) / 22000.0;
qreal y = (j + 7000) / 14000.0;
...