Qwt-Frage
Verfasst: 8. November 2007 09:57
Hallo!
Nachdem ich mich ein bisschen in Qt4 eingearbeitet habe, möchte ich nun mit Qwt5 einige Daten darstellen. Dabei handelt es sich um bis zu 50 Kurven, die in einem Plot dargestellt werden sollen. Die Daten sind zentral (in einer QList) in einer "projectData"-Klasse (abgeleitet von QObject) gespeichert und jede Sekunde kommt zu jeder Kurve ein neuer Wert hinzu.
Nun habe ich mir mit dem Designer einen Dialog gebastelt (class VisualisationDialog : public QDialog, public Ui_VisualisationDialog) und kann dort auch einen Qwt-Plot (class gpsviewPlotter : public QwtPlot) darstellen. Wenn ich testhalber im Konstruktor von "gpsviewPlotter" Daten "hartkodiere", also
dann bekomme ich auch einen vernünftigen Plot. Wie aber kann ich (mit Hilfe von QwtData?) am besten die Daten von "projectData" darstellen? Ich habe mir schon eine setCurveData(double x, double y, int Anzahl) -Methode im gpsviewPlotter geschrieben, aber irgendwie funktioniert das nicht (=> Plot leer). Die Beispiele (z.B. "simple_plot") helfen mir irgendwie nicht weiter.
Uwe schreibt:
Vielen Dank für Eure Hilfe!
Markus
Nachdem ich mich ein bisschen in Qt4 eingearbeitet habe, möchte ich nun mit Qwt5 einige Daten darstellen. Dabei handelt es sich um bis zu 50 Kurven, die in einem Plot dargestellt werden sollen. Die Daten sind zentral (in einer QList) in einer "projectData"-Klasse (abgeleitet von QObject) gespeichert und jede Sekunde kommt zu jeder Kurve ein neuer Wert hinzu.
Nun habe ich mir mit dem Designer einen Dialog gebastelt (class VisualisationDialog : public QDialog, public Ui_VisualisationDialog) und kann dort auch einen Qwt-Plot (class gpsviewPlotter : public QwtPlot) darstellen. Wenn ich testhalber im Konstruktor von "gpsviewPlotter" Daten "hartkodiere", also
Code: Alles auswählen
...
curve = new QwtPlotCurve( QString("Curve1") );
curve->setRenderHint(QwtPlotItem::RenderAntialiased);
curve->setPen(QPen(Qt::yellow));
curve->setYAxis(QwtPlot::yLeft);
curve->attach(this);
double x[5];
double y[5];
x[0] = 0.0; y[0] = 0.0;
x[1] = 10.0; y[1] = 100.0;
x[2] = 20.0; y[2] = 10.0;
x[3] = 30.0; y[3] = -10.0;
x[4] = 40.0; y[4] = 33.0;
curve->setData( x, y, 5);
// curve->setData(gpsviewPlotData(x[0], y[0], (size_t) 5));
replot();
...
Uwe schreibt:
Gibt es dafür Beispiele? Mir noch nicht klar, wie man das macht...Qwt speichert keine Daten, sondern zeichnet sie nur. D.h. Du mußt eine eigene Datenhaltung implementieren, in die Du dann die zusätzlichen Punkte einträgst.
Die Verbindung zwischen Deiner Datenhaltung und Qwt funktioniert über ein QwtData Objekt. Du kannst eine der vordefinierten QwtData Klassen verwenden, wenn aber keines passt, leite einfach ein zu Deiner Datenhaltung passendes ab.
Vielen Dank für Eure Hilfe!
Markus