使用下面的代码片段,我创建了一个具有100.000个矩形的场景。
表现还不错;该 View 响应没有延迟。

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);
}

对于场景元素的前半部分, View 会延迟对鼠标和按键事件的响应,而对于另一半,这似乎还可以。

前一个场景的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;
         ...

最佳答案

我为您提供了解决方案,但保证不问我为什么这样做,
因为我真的不知道:-)

QGraphicsScene * scene = new QGraphicsScene;
// Define a fake symetrical scene-rectangle
scene->setSceneRect(0, -(25*100000+20), 40, 2 * (25*100000+20) );

for (int y = 0; y < 100000; y++) {
    scene->addRect(0, y * 25, 40, 20);
}
view->setScene(scene);
// Tell the view to display only the actual scene-objects area
view->setSceneRect(0, 0, 40, 25*100000+20);

10-07 13:03