微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

QGraphicsScene,项目坐标影响性能?

使用以下代码片段,我创建一个具有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,20);
}

对于场景元素的上半部分,视图延迟了鼠标和关键事件的响应,而对于另一半,它似乎还可以吗?

前景场景为sceneRect(x,y,w,h)=(0,-1250000,2499995).
后一场景具有sceneRect(x,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),2 * (25*100000+20) );

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

原文地址:https://www.jb51.cc/css/216771.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。