Con el siguiente fragmento de código creo una escena con 100.000 rectángulos.
El rendimiento es bueno; la vista responde sin retrasos.QGraphicsScene, las coordenadas de los artículos afectan el rendimiento?
QGraphicsScene * scene = new QGraphicsScene;
for (int y = -50000; y < 50000; y++) {
scene->addRect(0, y * 25, 40, 20);
}
...
view->setScene(scene);
Y ahora el segundo fragmento chupa
for (int y = 0; y < 100000; y++) {
scene->addRect(0, y * 25, 40, 20);
}
Para la primera mitad de elementos de la escena la vista demoras para responder en ratón y la tecla eventos, y para la otra mitad parece estar bien?! ?
La escena anterior tiene sceneRect (x, y, w, h) = (0, -1250000, 40, 2499995).
La última escena tiene sceneRect (x, y, w, h) = (0, 0, 40, 2499995).
No sé por qué el sceneRect afecta el rendimiento, ya que el índice BSP se basa en las coordenadas del artículo relativo.
¿Echo de menos algo? No encontré ninguna información sobre la documentación, más la demostración de Qt 40000 Chips, también distribuye los elementos alrededor (0, 0), sin explicar el motivo de esa elección.
// 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;
...
Mi primera suposición es el recálculo de la escena rect. ¿Qué sucede si configura sceneRect antes de agregar los elementos? –
@Stephen, el resultado es el mismo. La vista tarda en responder aunque la escena esté lista y estática. –
Guau, muy sorprendente. Ejecuté algunas pruebas, y parece que el widget se vuelve lento solo cuando miras las cajas de 1 a 50.000. Después, es decir, 50.001-100.000, todo está sin problemas. Aún más preocupante, si rango 'for (int y = -70000; y <30000; y ++)', entonces el desplazamiento es suave para -70.000/-20.000, es lento para -20.000/0, luego suave de nuevo para 0/30.000 ! – Fezvez