Seite 1 von 1

scatter plot mit qwt

Verfasst: 14. April 2011 15:42
von Phonon
Hallo, ich bin recht neu in der Welt von C++ und Qtund versuche Stück für Stück tiefer einzutauchen. Vorallem muss ich dies auch, um meine Bachelorarbeit voranzubringen :wink: .

Ich habe eine Reihe von Daten, welche erst vom Programm während der Laufzeit erzeugt werden. (Bisher in einem QVector<double> gespeichert.) Diese möchte/muss ich als scatter plot darstellen. Der Laufindex des Vectors ist quasi meine Ordinate und der Datenwert selbst meine Absizze.

Ich habe in den Beispieldateien von qwt schon ein entsprechendes Beispiel gefunden zur Visualisierung. Doch habe ich hier aufgrund von Unerfahrenheit noch Probleme:

Die Daten werden dort schon beim Starten des Programmes visualisiert. Meine würden allerdings erst beim Programmablauf erstellt werden. Weiterhin war dort immer der Plot das gesamte Programmfenster. Bei mir wären mehrere Schieberegler, Text, Schaltflächen (halt ein übliches QMainWindow) + mehrere Plots (ich muss mehrere Datenreihen darstellen) im GUI.

Bisher ist mein Programm in zwei Klassen aufgeteilt: Eine zur Darstellung (alle Signals-Slots) und eine zur Berechnung und Weiterverarbeitung der Daten.
Brauche ich weitere Klassen zum Darstellen der plots oder kann dies auch in der schon bestehenden Klasse zur Darstellung untergebracht werden?

Ich programmiere unter Visual Studio 2008, QtDesigner (Qt4.7) mit integriertem qwt6. Sollten noch weitere Fragen bestehen, so fragt. Ich bin für jede Hilfe dankbar. :D

Verfasst: 16. April 2011 10:13
von Phonon
Ok, ich habe es inzwischen hinbekommen, dass ich die Achsen beschriften und ändern kann meines qwtPlot Widgets.

Auf http://qwt.sourceforge.net/class_qwt_pl ... 88c6071b2a

ist

Code: Alles auswählen

void QwtPlotCurve::setSamples 	(	const QVector< QPointF > & 	samples	)
vermerkt, doch wenn ich diese mit

Code: Alles auswählen

QwtPlotCurve::setSamples(test_data);
aufrufe (test_data ist ein QVector<qreal>), erhalte ich als Fehlermeldung

Code: Alles auswählen

"QwtPlotCurve::setSamples": Durch keine der 3 Überladungen konnten alle Argumenttypen konvertiert werden.
1>        D:\Qt\qwt-6.0.0-rc5\src\qwt_plot_curve.h(192): kann 'void QwtPlotCurve::setSamples(const QVector<T> &)' sein
1>        with
1>        [
1>            T=QPointF
1>        ]
1>        bei Anpassung der Argumentliste '(QVector<T>)'
1>        with
1>        [
1>            T=qreal
1>        ]
Was habe ich übersehen und kann mir jemand einen Link schicken, wo QPointF deklariert wird? Ich habe es in der Doku bisher nicht finden können.

Verfasst: 16. April 2011 13:00
von Christian81
Im Qt Assistant QPointF eingeben ist wohl wirklich sehr schwer... http://doc.trolltech.com/4.7/qpointf.html
Wie sollte man eine Koordinate mit nur einem Punkt spezifizieren?

Verfasst: 16. April 2011 14:24
von Phonon
Verdammt, beim QAssistant habe ich gar nicht geschaut. Habe nur bei qwt danach gesucht. Danke für den Hinweis.
Normalerweise ist dieser schon meine erste Anlaufstelle, wenn ich etwas suche.

Edit: Man kann auch eine Koordinate mit einem Punkt spezifizieren, wenn man als Δx z.B. immer die Einheitslänge nimmt und nur die jeweilligen f(x) angibt.
Das war das, was ich mir von setSample() erhoffte.

So, es läuft. Danke nochmal für den Hinweis mit QPointF. Damit kam ich dahin, wohin ich wollte :D