Seite 1 von 1

QWidget als Image speichern

Verfasst: 27. Januar 2010 16:07
von sacrif
Hi,

ich habe eine von einem QWidget abgeleitete Klasse erstellt. Diese dient nur dazu um mit hilfe einer Brush (diese wiederum mit Qgradient gesetzt) das widget mit bestimmten farben zu füllen.
Nun möchte ich diese mein abgeleitetes Widget sobald es mit der Brush eingefärbt ist gerne als Bild speichern (png zb.).

Ich habe in erfahrung gebracht dass das generell mit einem QImageWriter geht, aber kann ich damit auch widgets als Bilder speichern?

lg scr

Verfasst: 27. Januar 2010 16:54
von Christian81
Siehe QPixmap::grabWindow()

Verfasst: 27. Januar 2010 17:47
von sacrif
Danke für die schnelle Antwort! Problem ist gelöst.

Bei grabwindow besteht aber so weit ich das erfasst habe das Problem dass es wie ein screenshot ist - also werden über das Fester gelagerte Fenster mit in das bild aufgenommen.

Falls jemand einmal eine alternative Lösung brauchen sollte ich hab jetzt in das abgeleitete Widget eine Funktion mit folgendem Code dazu getan:

QString fileName("whatever");
QPainter *painter = new QPainter();
QImage *image = new QImage(QSize(width() - 1, height() - 1), QImage::Format_ARGB32);

painter->begin(image);
this->render(painter);
painter->end();
image->save(fileName);
delete painter;
delete image;

Painter rendert also das aktuelle widget in das image hinein.

lg scr

Verfasst: 27. Januar 2010 18:56
von Christian81
Aber deswegen musst Du doch nicht ableiten :)

Code: Alles auswählen

QImage img;
QPainter p(&img);
myWidget->render(&p);
p.end();
img.save("blub.png", "PNG");

Verfasst: 27. Januar 2010 21:55
von sacrif
hmmm :)

Ich bin ja noch qt anfänger - aber meine klasse macht sonst schon auch noch was ;)
bzw wird noch mehr tun.

Verfasst: 27. Januar 2010 22:00
von Christian81
Wenn die Klasse nochwas anderes macht dann ja, aber extra nur wegen QWidget::render() muss man nicht ableiten. :)