2017-03-09 38 views
0

Qtで簡単なMandlebrotビューアを作成しようとしていますが、メインウィンドウにQGraphicsSceneがあり、Qimageに画像を生成してから、QMainWindowでQGraphicsSceneを更新するには

私は最初の画像を表示することができますが、私は座標を変更した後に再レンダリングする方法がわかりません。 私の人生の中で、私はQMainWindowをリフレッシュする方法、あるいはMainWindowからQGraphicsSceneを削除し、それをレンダリングするための呼び出しを行う方法を考えることができません。

QImage renderImage(//loads in global variables) 
{ 
    //calculates the image and returns a QImage 
} 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    QGraphicsScene *graphic = new QGraphicsScene(this); 
    graphic->addPixmap(QPixmap::fromImage(renderImage())); 
    ui->graphicsView->setScene(graphic); 

} 

void MainWindow::on_Left_clicked() 
{ 
    // Changes global variables and try to rerender the scene. 

    update(); //does nothing 
} 

UPDATE:解決! たくさんの助けをしてくれてありがとう、ありがとう。私はQtが新しくなっているので、ループがどこを更新するのかは分からなかった。あなたが提案したコードを追加したところ、完全に機能しました。ありがとう:)

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    QGraphicsScene *graphic = new QGraphicsScene(this); 
    pixmap_item = graphic->addPixmap(QPixmap::fromImage(renderImage())); 
    ui->graphicsView->setScene(graphic); 

} 

void MainWindow::on_Left_clicked() 
{ 
    // Changes global variables and try to rerender the scene. 
    centerR -= 0.1; 
    pixmap_item->setPixmap(QPixmap::fromImage(renderImage())); 
} 
+0

彼はQGraphicsViewを持っています。これはUI定義にあり、コンストラクターで正しく設定されています。 – goug

答えて

1

あなたは座標を変更するコードは表示しません。 のような組み込みのグラフィック項目の場合は、addPixmapというコールで作成するもので、通常は何も強制する必要はありません。これらのオブジェクトは、メンバー関数を使用して何かを変更するときに必要に応じて再描画されます。

あなたが間違っているのは、ピックスマップとコンストラクタで作成したQGraphicsPixmapItemとの間に接続があると信じている可能性があるということです。ありません。変更するピックスマップの場合は、そのピックスマップをピックスマップアイテムに再適用する必要があります。あなたのピックスマップを更新した時はいつでもその後、グラフィックアイテムにそのピックスマップを再適用

pixmap_item_ = graphic->addPixmap(QPixmap::fromImage(renderImage())); 

QGraphicsPixmapItem *pixmap_item_; 

そしてへのあなたのコンストラクタのコードを変更:あなたが追跡するために、あなたのクラスに新しいメンバーが必要になりますあなたは、コンストラクタで作成した:

pixmap_item_->setPixmap (QPixmap::fromImage(renderImage())); 

setPixmapコール自体を再描画するためにピックスマップ項目がトリガされます。別途update()に電話する必要はありません。これが問題でない場合は、さらにコードを確認する必要があります。

関連する問題