web-dev-qa-db-ja.com

QGraphicsScene / QGraphicsViewから画像ファイルを作成する方法は?

QGraphicsScene、またはQGraphicsViewを指定すると、画像ファイル(できればPNGまたはJPG)を作成できますか?はいの場合、どのように?

25
Donotalo

私はこれを試していませんが、これはそれを行う方法のアイデアです。

これはいくつかの方法で実行できます。1つの形式は次のとおりです。

QGraphicsView* view = new QGraphicsView(scene,this);
QString fileName = "file_name.png";
QPixmap pixMap = view->grab(view->sceneRect().toRect());
pixMap.save(fileName);
//Uses QWidget::grab function to create a pixmap and paints the QGraphicsView inside it. 

もう1つは、レンダリング関数QGraphicsScene :: render()を使用することです。

QImage image(fn);
QPainter Painter(&image);
Painter.setRenderHint(QPainter::Antialiasing);
scene.render(&Painter);
image.save("file_name.png")
29
jordenysp

この問題に対処した後、新しい答えを保証するのに十分な改善があります。

scene->clearSelection();                                                  // Selections would also render to the file
scene->setSceneRect(scene->itemsBoundingRect());                          // Re-shrink the scene to it's bounding contents
QImage image(scene->sceneRect().size().toSize(), QImage::Format_ARGB32);  // Create the image with the exact size of the shrunk scene
image.fill(Qt::transparent);                                              // Start all pixels transparent

QPainter Painter(&image);
scene->render(&Painter);
image.save("file_name.png");
32
Petrucio

grabWidgetは非推奨です。grabを使用してください。そして、あなたはQFileDialogを使うことができます

QString fileName= QFileDialog::getSaveFileName(this, "Save image", QCoreApplication::applicationDirPath(), "BMP Files (*.bmp);;JPEG (*.JPEG);;PNG (*.png)" );
    if (!fileName.isNull())
    {
        QPixmap pixMap = this->ui->graphicsView->grab();
        pixMap.save(fileName);
    }
8
amdev