I'm currently struggling with populating a qgraphicsscene with many (> 1Million) objects (Polygons, Lines, Points). What I've observed is, that when creating randomly 100000 Polygons, I'm already ending up withe 130MB memory consumption. (The simple example below is based on a default Qt-Project using the View.cpp of the chip-demo example)
Qt Code:
  1. QtGrafikTestBasic::QtGrafikTestBasic(QWidget *parent): QMainWindow(parent)
  2. {
  3. ui.setupUi(this);
  4. QSplitter *h1Splitter = new QSplitter;
  5. QSplitter *vSplitter = new QSplitter;
  6. vSplitter->addWidget(h1Splitter);
  7.  
  8. View* view = new View("asdf");
  9. h1Splitter->addWidget(view);
  10.  
  11. QHBoxLayout *layout = new QHBoxLayout;
  12. layout->addWidget(vSplitter);
  13. setLayout(layout);
  14. setCentralWidget(view);
  15.  
  16. QBrush *brush = new QBrush();
  17. brush->setColor(Qt::blue);
  18. brush->setStyle(Qt::SolidPattern);
  19. QPen *pen = new QPen();
  20. pen->setWidth(0);
  21.  
  22. srand ( time(NULL) );
  23. int m_PolyWidth = 10;
  24.  
  25. for (int i = 0 ; i < 100000; i++)
  26. {
  27. double lBaseX = rand() % ((int)floor(width()) - m_PolyWidth);
  28. double lBaseY = rand() % ((int)floor(height()) - m_PolyWidth);
  29.  
  30. QPolygonF polygon;
  31. polygon << QPointF(lBaseX, lBaseY);
  32. polygon << QPointF(lBaseX + m_PolyWidth, lBaseY);
  33. polygon << QPointF(lBaseX + m_PolyWidth, lBaseY + m_PolyWidth);
  34. polygon << QPointF(lBaseX, lBaseY + m_PolyWidth);
  35.  
  36. scene->addPolygon(polygon, *pen, *brush);
  37. }
  38. view->view()->setScene(scene);
  39. }
To copy to clipboard, switch view to plain text mode 

So what am I doint wrong here / where can I improve? I've read some posts of creating an own class like the chip-example, so I simply used the chip example but also there I've encountered the problem that as soon as I change the part which uniformly distributes the chips from
Qt Code:
  1. item->setPos(QPointF(i, j));
To copy to clipboard, switch view to plain text mode 
to a random distribution
Qt Code:
  1. item->setPos(QPointF(lBaseX, lBaseY));
To copy to clipboard, switch view to plain text mode 
, the memory consumption explodes also here...

So, what is the most performant and least memory-consuming way of drawing polygons, (poly-)lines and points in Qt?