Seite 1 von 1

[gelöst] QwtPlot speichern mit Achsen

Verfasst: 3. Februar 2009 17:09
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.

Verfasst: 4. Februar 2009 07:48
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

Verfasst: 4. Februar 2009 10:27
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;

Verfasst: 5. Februar 2009 10:27
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

Verfasst: 5. Februar 2009 11:35
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.