使用下面的代码片段,我创建了一个包含 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演示 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;
...
for (int y = -70000; y < 30000; y++)
,那么对于-70,000/-20,000的滚动是平稳的,对于-20,000/0则会卡顿,然后对于0/30,000又会变得平稳! - B. Decoster