2017-03-09 130 views
0

我剛開始在QT中工作,我試圖改變每個像素圖的一些像素顏色。QT每幀更改像素圖

QGraphicsScene *graphic = new QGraphicsScene(this); 
QPixmap LifeMap=QPixmap(QPixmap::fromImage(LifeGrid)); 

這是我的圖形場景和我的pixmap聲明。

所以,我呼籲每幀的功能,我使用這行代碼來更新像素圖

graphic->addPixmap(QPixmap::fromImage(LifeGrid)); 

而且workes,但每隔幾秒鐘,我已經越來越少的RAM內存。我的記憶力充沛後,我的電腦停止工作,我無法做任何事情。 (我想它與addPixmap函數有關,因爲它會分解一個全新的像素圖)

那麼是否有一個函數可以讓我只更新這個圖形或更改pixmap?

在此先感謝!

+0

好的,'addPixmap'只是增加在場景之上新的像素圖,所以舊的像素圖永遠不會被移除,並且很快就會耗盡內存。但我想你只是想改變一些像素,而不是每幀增加一個像素圖!? – xander

回答

2

是否有一個函數可以讓我只更新這個圖形或更改pixmap?

是的。每次像素圖更改時,您都必須使用一個像素圖項目,而不是創建一個。你也可以通過值來保存場景和項目,節省額外的間接層,並利用C++編譯器自動完成所有的內存管理:

class MyClass : ... { 
    QGraphicsScene m_scene; 
    QGraphicsPixmapItem m_pixmapItem; // must be after m_scene: in C++ this order matters! 
    ... 
} 

MyClass::MyClass() { 
    ... 
    m_scene->addItem(&m_pixmapItem); 
} 

void MyClass::myMethod() { 
    m_pixmapItem.setPixmap(QPixmap::fromImage(LifeGrid)); 
}