2011-09-16 11 views

risposta

20

Non ho provato questo, ma questa è l'idea di come farlo.

È possibile farlo in diversi modi Una forma è la seguente:

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. 

L'altro è quello di utilizzare la funzione di rendering QGraphicsScene :: render():

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

fantastico! Grazie. ho provato il secondo approccio. l'unica cosa richiesta è che il 'QImage' debba essere inizializzato. – Donotalo

25

Dopo appena trattare con questo problema, c'è abbastanza miglioramento qui per garantire una nuova risposta:

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"); 
6

grabWidget è obsoleto, utilizzare la funzione di rimozione. Ed è possibile utilizzare un 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); 
    } 
+1

Ho testato la soluzione e la soluzione * Petrucio *. Entrambi funzionano, grazie mille. Mi piace di più la tua soluzione :), è più breve. –

Problemi correlati