1

QGraphicsSceneとQPixmapを扱うときに、問題が発生しました。カメラで撮影したフレームを順番に表示しています。QTimerオブジェクトは、100ミリ秒ごとにupdateSingleView()関数を呼び出しています。それが私の内的機能です。

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はカメラのビューを表示していますが、残念ながらメモリリークが発生しています。呼び出したときに、関数は古いQPixmapを破壊するはずだscenes.at(0)->addPixmap(QPixmap::fromImage(Img));と思いましたが、明らかにそうではありません。removeItemリークが発生する理由とその解決方法を知っていますか?

4

2 に答える 2

2

Qtドキュメントから:

void QGraphicsScene :: removeItem(QGraphicsItem * item)

アイテムアイテムとそのすべての子をシーンから削除します。アイテムの所有権は呼び出し元に渡されます(つまり、QGraphicsSceneは破棄されたときにアイテムを削除しなくなります)。

addItem()も参照してください。

deleteしたがって、手動でアイテムを削除する必要があります。

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

于 2010-11-24T09:26:21.050 に答える
1

提案されたように

removeItem行の後にアイテムを削除する必要があります。

すなわち

QPointer _item = Scenes.at(0)-> items()。at(0); scenes.at(0)-> removeItem(_item); _itemを削除します。

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

....。

于 2010-11-24T16:35:13.927 に答える