29 Stimmen

Wie man eine Bilddatei aus QGraphicsScene / QGraphicsView erstellt?

Angenommen, es gibt eine QGraphicsScene oder QGraphicsView, ist es möglich, eine Bilddatei zu erstellen (vorzugsweise PNG oder JPG)? Wenn ja, wie?

34voto

Petrucio Punkte 5273

Nachdem dieses Problem gerade bearbeitet wurde, gibt es hier genug Verbesserung, um eine neue Antwort zu rechtfertigen:

scene->clearSelection();                                                  // Auswahl aufheben
scene->setSceneRect(scene->itemsBoundingRect());                          // Die Szene auf die begrenzenden Inhalte verkleinern
QImage image(scene->sceneRect().size().toSize(), QImage::Format_ARGB32);  // Das Bild mit der exakten Größe der verkleinerten Szene erstellen
image.fill(Qt::transparent);                                              // Alle Pixel transparent starten

QPainter painter(&image);
scene->render(&painter);
image.save("Dateiname.png");

31voto

jordenysp Punkte 2419

Ich habe das nicht ausprobiert, aber das ist die Idee, wie man es machen kann.

Sie können dies auf verschiedene Arten tun. Eine Möglichkeit ist wie folgt:

QGraphicsView* view = new QGraphicsView(scene, this);
QString fileName = "file_name.png";
QPixmap pixMap = view->grab(view->sceneRect().toRect());
pixMap.save(fileName);
//Verwendet die QWidget::grab Funktion, um eine Pixkarte zu erstellen und zeichnet den QGraphicsView darin.

Die andere Möglichkeit ist die Verwendung der render Funktion QGraphicsScene::render():

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

9voto

amdev Punkte 2602

GrabWidget ist veraltet, verwenden Sie grab. Und Sie können ein QFileDialog verwenden

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X