Удаление Qpixmap из QGraphicsScene - PullRequest
1 голос
/ 24 ноября 2010

Я решил проблему при работе с QGraphicsScene и QPixmap.Я последовательно отображаю кадры, снятые камерой.Объект QTimer вызывает функцию updateSingleView () каждые 100 мс.Это моя внутренняя функция:

void CCIGui::updateSingleView()
{

    unsigned char *const img = PGRSystem->SnapShot();

    QImage Img(img, 1024, 768, QImage::Format_RGB888);

    scenes.at(0)->removeItem(scenes.at(0)->items().at(0));
    scenes.at(0)->addPixmap(QPixmap::fromImage(Img));

    ui_camViews.at(0).graphicsView->setScene(scenes.at(0));

    delete [] img;
}

Gui отображает вид с камеры, но, к сожалению, есть утечка памяти, при вызове scenes.at(0)->addPixmap(QPixmap::fromImage(Img)); я думал, что функция removeItem должна уничтожить старую QPixmap, но, очевидно,не.Знаете ли вы, почему происходит утечка и как ее решить?

Ответы [ 2 ]

2 голосов
/ 24 ноября 2010

Из документации Qt:

void QGraphicsScene :: removeItem (QGraphicsItem * item)

Удаляет элемент элемента и все его дочерние элементы со сцены.Право собственности на элемент передается вызывающей стороне (т. Е. QGraphicsScene больше не будет удалять элемент при уничтожении).

См. Также addItem ().

Следовательно, вам необходимо удалитьс помощью delete вручную.

http://doc.trolltech.com/4.7/qgraphicsscene.html#removeItem

1 голос
/ 24 ноября 2010

Как предложено

, вам необходимо удалить элемент после строки removeItem.

т.е.

QPointer _item = scenes.at (0) -> items (). At(0);scenes.at (0) -> removeItem (_item);delete _item;

scenes.at (0) -> addPixmap (QPixmap :: fromImage (Img));

.....

...