使用下面的代码片段,我创建了一个包含 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);
}
对于第一半场景元素,视图延迟响应鼠标和按键事件,而另一半似乎没问题?!?
前一个场景有sceneRect (x, y, w, h) = (0, -1250000, 40, 2499995)。
后一个场景有sceneRect (x, y, w, h) = (0, 0, 40, 2499995)。
我不知道为什么 sceneRect 会影响性能,因为 BSP 索引是基于相对项目坐标的。
我错过了什么吗?我在文档上没有找到任何信息,加上 Qt demo 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;
...