Memory problem with QVector of QGraphicsLineItem objects
-
Hi,
I am trying to have in my QGraphicsScene a number of lines that update whenever the window is resized, but my problem comes when I want to clear the update the QVector by clearing and appending the updated QGraphicsLineItem objects.
Basically my problem is that whenever I try to clear the QVector, not all the memory allocated to it is released.Simplifying my code as far as I can gives me the following, but my issue persist:
@
// declare and initialise QVector
QVector<QGraphicsLineItem *> *xGrid = new QVector<QGraphicsLineItem *>();// fill the QVector with a few QGraphicsLineItem objects
for (int i = 0; i < 1000000; i++) {
xGrid->append(new QGraphicsLineItem(10, 10, 10, 10));}
qDebug() << xGrid->size(); // this prints 1000000
// clear the QVector trying to free the allocated memory
xGrid->clear();
qDebug() << xGrid->size(); // this prints 0@
Right after that for loop, my application is using about 354 Megabytes of memory (starting from 13.5 Mb).
After the clear(), my application uses about 350 Megabytes of memory, so I guess something is clearly wrong of I am missing something here, as I would expect my memory usage to back to 13.5 Mb.Any advice would be helpful
Thanks
-
Ok I think i figured it out.
I need to delete every QGraphicsLineItem object individually like so@
for (int i = 0; i < xGrid->size(); i++) {
delete xGrid->at(i);} xGrid->clear();@
And then at the end I clear the QVector.
By looking at the memory usage from Task Manager, for some reason I still feel like I need to do one last step. Can anyone confirm whether this is all I need to do?
Thanks
-
You can also use
@qDeleteAll(*xGrid);@
To really get the memory usage down to your starting point you would have to call
@xGrid->squeeze();@
as well, after the clear(). (Though the actual use of this is rather limited in most cases)