2017-03-09 13 views
0

QTで作業を始めたばかりで、各フレームのpixmapのピクセルカラーを変更しようとしています。QT各フレームのpixmapを変更する

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

これは私のグラフィックシーンと私のpixmap宣言です。私はピックスマップ

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

を更新するためのコード行を使用して、それがworkes各フレームを呼び出す関数内ので

が、数秒ごとに私は少なくRAMメモリを持っています。私の記憶がいっぱいになると、コンピュータが動作を停止し、私は何もしません。 (私は新しいpixmap全体を宣言しているので、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)); 
} 
関連する問題