[gelöst] QwtPlot speichern mit Achsen

Alles rund um die Programmierung mit Qt
Antworten
Gh0str1d3r
Beiträge: 11
Registriert: 19. Januar 2009 14:43

[gelöst] QwtPlot speichern mit Achsen

Beitrag von Gh0str1d3r »

Moin,

ich möchte gerne einen mit QwtPlot erstellten Graphen als Grafikdatei speichern. Ich bin dabei bisher auf folgende Lösung gekommen:

Code: Alles auswählen

QwtPlot *qwtPlot = new QwtPlot();

... (füllen mit Daten)


QPixmap *saver = ( qwtPlot -> canvas() ) -> paintCache();

saver -> save( filename, "PNG", 100 );
In diesem Fall wird aber nur die blanke Leinwand ohne die Achsen und den Titel gespeichert. Ich würde aber gerne das ganze Bild speichern so wie man es auch drucken kann, da ein Graph ohne Achsen nicht besonders viel Sinn macht.
Zuletzt geändert von Gh0str1d3r am 6. Februar 2009 14:33, insgesamt 1-mal geändert.
Uwe
Beiträge: 176
Registriert: 9. Oktober 2005 13:37
Wohnort: München

Beitrag von Uwe »

Das geht mit QwtPlot::print. Ich würde Dir ein skalierbares Vektorformat ( PDF oder SVG ) empfehlen. Das bode Beispiel zeigt wie das im Detail geht.

Wenn es unbedingt ein Format wie PNG sein muß, lass QwtPlot::print auf ein QPixmap/QImage zeichnen und speichere es dann.

Alternativ gibt es noch QwtPlot::grabPixmap(), aber das ergibt nur einen Screenshot.

Uwe
Gh0str1d3r
Beiträge: 11
Registriert: 19. Januar 2009 14:43

Beitrag von Gh0str1d3r »

Print habe ich auch probiert, aber das Ergebnis ist nicht gerade das was ich mir vorgestellt habe (siehe Anhang).

Code hierzu:

Code: Alles auswählen

	QPixmap *saver = new QPixmap( ( qwtPlot -> sizeHint() ).width(), ( qwtPlot -> sizeHint() ).height() );
	
	QwtPlotPrintFilter filter;

	qwtPlot -> print ( *saver, filter );
	
	saver -> save ( filename, "PNG", 100 );

	delete saver;
Dateianhänge
bild.png
bild.png (199.98 KiB) 2715 mal betrachtet
Uwe
Beiträge: 176
Registriert: 9. Oktober 2005 13:37
Wohnort: München

Beitrag von Uwe »

Du mußt Dein Pixmap natürlich erst initialisieren (QPixmap::fill). Als Größe würde ich auch nicht unbedingt QwtPlot::sizeHint() nehmen, sondern etwas was für Deine Ausgabe Sinn macht ( z.B. 800x600 ).

Aber nochmal: skalierbare Vektorformate wie PDF und SVG sind weitaus bessere Alternativen.

Uwe
Gh0str1d3r
Beiträge: 11
Registriert: 19. Januar 2009 14:43

Beitrag von Gh0str1d3r »

danke, das hat geholfen. Die Entscheidung, welches Dateiformat am besten ist, möchte ich gerne dem Nutzer überlassen. Daher soll es auch im png Format zu speichern sein.
Antworten