Если задано QGraphicsScene
или QGraphicsView
, возможно ли создать файл изображения (предпочтительно PNG или JPG)? Если да, то как?
Как создать файл изображения из QGraphicsScene/QGraphicsView?
Ответ 1
Я не пробовал это, но это идея о том, как это сделать.
Вы можете сделать это несколькими способами Одна из форм такова:
QGraphicsView* view = new QGraphicsView(scene,this);
QString fileName = "file_name.png";
QPixmap pixMap = QPixmap::grabWidget(view);
pixMap.save(fileName);
//Uses Qpixmap::grabWidget function to create a pixmap and paints the QGraphicsView inside it.
Другим является использование функции рендеринга QGraphicsScene:: render():
QImage image(fn);
QPainter painter(&image);
painter.setRenderHint(QPainter::Antialiasing);
scene.render(&painter);
image.save("file_name.png")
Ответ 2
После решения этой проблемы, здесь достаточно улучшения, чтобы гарантировать новый ответ:
scene->clearSelection(); // Selections would also render to the file
scene->setSceneRect(scene->itemsBoundingRect()); // Re-shrink the scene to it 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");
Ответ 3
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);
}