QGraphicsScene: itemsBoundingRect zu weit

Alles rund um die Programmierung mit Qt
Antworten
phlox81
Beiträge: 97
Registriert: 7. Juli 2009 12:30
Kontaktdaten:

QGraphicsScene: itemsBoundingRect zu weit

Beitrag von phlox81 »

Hallo,

ich habe ein Problem beim export einer QGraphicsScene als PNG.
Ich möchte nicht die gesamte Scene, sondern nur die Items als PNG.

Dies kann ich durch itemsBoundingRect auch erreichen, aber dieses Rechteck ist zu weit.
Habe als beispiel angefügt, welches ein einzelnes Item enthält, welches 50x50 px groß ist, das Bild sollte also Quadratisch sein.

Mein Code:

Code: Alles auswählen

void MainWindow::on_actionExport_PNG_triggered()
{
    QString file= QFileDialog::getSaveFileName(this,tr("export as png"));
    //QMessageBox::about(this,file,file);
    if(!file.endsWith(".png"))
        file = file + ".png";
    if(!file.isEmpty())
    {
        QPainter *pngPainter = new QPainter();
        QRectF rect = scene->itemsBoundingRect();
//create space around the items
        rect.setX(rect.x() - 20);
        rect.setY(rect.y() - 20);
        //rect.setWidth(rect.width() *0.7);
        rect.setHeight(rect.height() + 20);
        QRectF target = rect;
        target.setX(0);
        target.setY(0);
        QImage *image = new QImage(target.size().toSize(), QImage::Format_ARGB32);
        pngPainter->begin(image);
        scene->render(pngPainter,target,rect);
        pngPainter->end();
        image->save(file);
        delete pngPainter;
        delete image;
    }
}
Das Item leitet von QGraphicsEllipseItem ab, und setzt seine größe per setRect im Construktor.
Irgendwie habe ich das Gefühl das es auch mit den Maßen der Scene zu hat, diese ist hier 1000 x 500, was den seitenverhältnissen im Bild Entspricht, aber dies ist nicht immer so.

Muss ich evtl. boundingRect durch ein eigenes ersetzen?

phlox
Dateianhänge
Beispiel mit einem Item
Beispiel mit einem Item
tests.png (5.68 KiB) 2036 mal betrachtet
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Lass dir doch mal kurz bevor du target und rect verwendest, beide per qDebug() ausgeben...
phlox81
Beiträge: 97
Registriert: 7. Juli 2009 12:30
Kontaktdaten:

Beitrag von phlox81 »

upsala hat geschrieben:Lass dir doch mal kurz bevor du target und rect verwendest, beide per qDebug() ausgeben...
Danke, das hat mir gezeigt, das das Target Rect nicht ganz korrekt erzeugt wird.
Wenn ich die Länge und Höhe seperat setze, klappts.
Antworten