Probleme mit insertCurve

Verschiedenes zu Qt
Antworten
steffie82
Beiträge: 16
Registriert: 15. November 2006 17:23

Probleme mit insertCurve

Beitrag von steffie82 »

Hallo,

ich möchte eine Kurve anzeigen lassen. Ich habe im Internet ein paar Beispiele dazu gefunden wie das geht.
Wenn ich das mit insertCurve machen will, kommt entweder diese Fehlermeldung:

error C2039: 'insertCurve': Ist kein Element von 'QwtPlot'

oder diese:

error C3861: 'insertCurve': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden

Woran kann das liegen? Wie krieg ich meine Kurve hin?

Danke,

steffie82
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

QwtPlot hat ja auch keine Memberfunktion insertCurve... Und da es hier eigentlich um Qt und nicht um Libs geht, die auf Qt aufbauen, würde ich mal in der Dokumentation von Qwt nachschaun...
steffie82
Beiträge: 16
Registriert: 15. November 2006 17:23

Beitrag von steffie82 »

Die examples im Tutorial sind irgendwie so kompliziert..
Wäre jemand so nett, mir eine Kurve so simpel wie möglich zu zeichnen? Einfach y=x oder y=sin(x) oder sowas..
Danke! :D
bst
Beiträge: 56
Registriert: 7. November 2006 13:16
Wohnort: Ilsfeld

Beitrag von bst »

Hi steffie82,

mal ein Versuch.

HTH, Bernd
--
simpleplot.h:

Code: Alles auswählen

#ifndef SIMPLEPLOT_H
#define SIMPLEPLOT_H

#include <qwt_plot.h>

class SimplePlot : public QwtPlot
{

public:
	SimplePlot(QWidget *parent = 0);
	~SimplePlot() {};

};

#endif // SIMPLEPLOT_H
main.cpp:

Code: Alles auswählen

#include <QtGui/QApplication>
#include "simpleplot.h"

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	SimplePlot w;
	w.show();
	return a.exec();
}
simpleplot.cpp:

Code: Alles auswählen

#include "simpleplot.h"
#include <qwt_plot_curve.h>
#include <qwt_legend.h>

SimplePlot::SimplePlot(QWidget *parent) : QwtPlot(parent)
{
	const int points = 500;
	double x[points];
	double y[points];

   for (int i = 0; i < points; i++)
   {
	   x[i] = i * 2 * 3.14 / points;
		y[i] = sin(x[i]);
   }

	setTitle( "Sinus" );
   insertLegend(new QwtLegend(), QwtPlot::RightLegend);
   setAxisTitle( xBottom, "x" );
   setAxisTitle( yLeft, "y" );

	QwtPlotCurve *pc = new QwtPlotCurve("y = sin(x)");
	pc->setRenderHint(QwtPlotItem::RenderAntialiased);
	pc->setPen(QPen(Qt::red));
	pc->attach(this);
	pc->setData(x, y, points);

   replot();
}
steffie82
Beiträge: 16
Registriert: 15. November 2006 17:23

Beitrag von steffie82 »

Hi,

danke Bernd! Genau sowas hab ich gesucht! :D
Hast mir sehr weitergeholfen..


Grüße,

Steffie
qt_beginner
Beiträge: 9
Registriert: 28. Juni 2007 15:11

Beitrag von qt_beginner »

Hi,

danke, habt auch mir geholfen!
Wie kann ich alles, was unter der Kurve liegt, schwarz malen?
Mit fillCurve krieg ichs irgendwie nicht hin :(
bst
Beiträge: 56
Registriert: 7. November 2006 13:16
Wohnort: Ilsfeld

Beitrag von bst »

Hallo,

noch ein Versuch ;-)

nach:

Code: Alles auswählen

pc->setPen(QPen(Qt::red));
nimm mal noch sowas hinzu:

Code: Alles auswählen

pc->setBaseline(-1.0);
pc->setBrush(QBrush(Qt::black,Qt::SolidPattern));
cu, Bernd
qt_beginner
Beiträge: 9
Registriert: 28. Juni 2007 15:11

Beitrag von qt_beginner »

Wooow, danke!!! :D So hatte ich mir das gedacht :D

THX!!!!
qt_beginner
Beiträge: 9
Registriert: 28. Juni 2007 15:11

Beitrag von qt_beginner »

tolles Forum hier!!
qt_beginner
Beiträge: 9
Registriert: 28. Juni 2007 15:11

Beitrag von qt_beginner »

Hallo Bernd,

ich bin's nochmal :mrgreen:
Weißt du zufällig auch, wie man Werte ständig weiterberechnet, also dass der Sinus sich quasi "bewegt", weil vorne immer wieder neue Werte eingegeben werden und dass der Graph nicht mehr stehenbleibt?
Dass quasi ständig aktualisiert wird.
Ich hab mir schon das realtime plot dazu angeschaut, aber irgendwie werde ich daraus nicht schlau. Das muss doch auch einfacher gehen?

Wäre nett, wenn jemand dazu ne Idee hat!

Grüße,

qt_beginner
Uwe
Beiträge: 176
Registriert: 9. Oktober 2005 13:37
Wohnort: München

Beitrag von Uwe »

Zum Einstieg sind sicher eher das simple oder das bode Beispiel geeignet. Für eine wandernde Achse schau Dir am Besten mal das cpuplot Beispiel an.

Das realtime Beispiel zeigt eine Optimierung für einen sehr selten gebrauchten Spezialfall - der mit Qt4 ohnehin nur noch auf X11 funktioniert. Warum verbeißt Du Dich da ?

Uwe

PS: Der Code für die Sinus Kurve ist im Übrigen das simple Bespiel aus Qwt4. Warum der als Datei so viel "komplizierter" ist, als wenn er hier im Forum gepostet wird, werde ich nie verstehen.
bst
Beiträge: 56
Registriert: 7. November 2006 13:16
Wohnort: Ilsfeld

Beitrag von bst »

@Uwe,
Der Code für die Sinus Kurve ist im Übrigen das simple Beispiel aus Qwt4.
Interessant, ich habe das im Prinzip von hier (Qwt4 kenne ich nicht): http://www.digitalfanatics.org/projects ... ter11.html

In Qwt5 benutzt Du da eine von QwtData abgeleitetete Klasse SimpleData. Das ist IMHO schon etwas komplizierter als 2 Arrays an SetData zu übergeben. Wäre das einfachere Beispiel aus Qwt4 denn vielleicht nicht auch noch von Interesse ?

cu, Bernd
qt_beginner
Beiträge: 9
Registriert: 28. Juni 2007 15:11

Beitrag von qt_beginner »

Uwe hat geschrieben:Für eine wandernde Achse schau Dir am Besten mal das cpuplot Beispiel an.
Wenn ich cpuplot starte, kommt nach 2 Sekunden bei mir ein Debug Error :( und ich kann leider nicht sehen, was das Programm macht
Uwe hat geschrieben: Das realtime Beispiel zeigt eine Optimierung für einen sehr selten gebrauchten Spezialfall - der mit Qt4 ohnehin nur noch auf X11 funktioniert. Warum verbeißt Du Dich da ?
Ich hab hier im Forum mal gesucht und jemanden gefunden, der quasi dasselbe Problem wie ich hatte und ihm wurde das realtime-Beispiel nahe gelegt. Daher..
Kann man den Graphen auch ohne so einen counter "laufen lassen"?
Eigentlich soll der Graph stehenbleiben und durch einen Cursor, der dadrüber läuft, aktualisiert werden. Versteht ihr was ich meine? ;-)

Dachte vielleicht gibt es irgendeine "Aktualisierungsfunktion", an der immer neue Daten übergeben und sofort ausgegeben werden im Plot.
Gibt es da irgendein Beispiel zu?
Zuletzt geändert von qt_beginner am 29. Juni 2007 13:26, insgesamt 1-mal geändert.
qt_beginner
Beiträge: 9
Registriert: 28. Juni 2007 15:11

Beitrag von qt_beginner »

bst hat geschrieben: In Qwt5 benutzt Du da eine von QwtData abgeleitetete Klasse SimpleData. Das ist IMHO schon etwas komplizierter als 2 Arrays an SetData zu übergeben.
Genau, das find ich auch. Da wird ne komplette Klasse definiert.. und bei dir waren es nur ein paar Zeilen :D
Uwe
Beiträge: 176
Registriert: 9. Oktober 2005 13:37
Wohnort: München

Beitrag von Uwe »

bst hat geschrieben:Das ist IMHO schon etwas komplizierter als 2 Arrays an SetData zu übergeben. Wäre das einfachere Beispiel aus Qwt4 denn vielleicht nicht auch noch von Interesse ?
Nein, das ist ausreichend in der Dokumentation zur Klasse QwtPlot dargestellt.

Man kann sicher darüber streiten, ob es einfacher ist einen Funktionspointer (hier ::sin()) zu übergeben, oder ob man temporäre Arrays befüllt und anschliessend übergibt. In Qwt 5.1 wird die SimpleData Klasse ohnehin in verallgemeinerter Form in die Bibliothek wandern, so daß man als Anwender nur noch Funktionspointer und Anzahl Punkte übergeben muß.

Der Text aus dem Tutorial ist zu Zeiten von Qwt4/Qt3 geschrieben worden und wendet sich nur an ganz einfach Anwendungen. Ich hatte schon immer mal vor selber ein Dokument zu schreiben um das grundlegende Design darzustellen. Denn das eigentliche Problem sind weniger die kleinen Anwendungen, die z.B möglichst einfach eine Sinus Kurve darstellen wollen, sondern vielmehr wenn individualle Daten individuell repräsentiert werden sollen.

Aber in der Regel schaffe ich sehr viel weniger als ich mir vornehme ...

Uwe
Antworten