Seite 1 von 1
QWT, X Achsenbeschriftung
Verfasst: 28. Juli 2010 22:24
von mensuez
Hallo leude,
bin ziemlich neu in der qwt welt. Deswegen wollte ich euch um hilfe bitten bei meinem problem und zwar:
Bekomme ich daten in der form x-> Uhrzeit(hh:mm:ss.ns, die ich
nicht berechne, irgendeine halt die ein anderer prozess zur verfügung stellt), y-> ein wert zwischen 0 und 1. Meine frage lautet wie bilde ich diese uhrzeit auf die x achse ab? Habe wie im beispiel cpuplot von der Klasse QwtScaleDraw abgelitten und die methode label überschrieben, aber weiss jetzt nicht wie ich meine uhrzeit(die ich fortlaufend als parameter erhalte) abbilde. Bei dem beispiel cpuplot wird ja die uhrzeit berechnet, was bei mir der fall nicht ist, es geht einfach darum den wert den ich erhalte als label an die jeweilige stelle zu platzieren.
Danke für jede hilfe.

Verfasst: 30. Juli 2010 07:42
von Uwe
Code: Alles auswählen
QString valueToDate(double value)
{
...
}
double dataToValue(const QString &date)
{
...
}
QwtScaleDiv toScaleDiv(const QList<QString> &dates)
{
QList<double> ticks;
double min = 0.0;
double max = 0.0;
for ( int i = 0; i < dates.size(); i++ )
{
const double value = dateToValue(dates[i]);
if ( i == 0 )
{
min = max = value;
}
else
{
if ( value < min )
min = value;
if ( value > max )
max = value;
}
ticks += value;
}
QwtScaleDiv sd;
sd.setInterval(min, max);
sd.setTicks(QwtScaleDiv::MajorTick, ticks);
return sd;
};
class YourScaleDraw: public QwtScaleDraw
{
...
virtual QwtText label(double value) const
{
return valueToDate(value);
};
plot->setAxisScaleDraw(axis, new YourScaleDraw());
plot->setAxisScaleDiv(axis, toScaleDiv(...));
HTH,
Uwe
Verfasst: 30. Juli 2010 11:30
von mensuez
hmm nicht wirklich, die methode valueToDate verstehe nicht wie die umrechnung funktioniert, der parameter value gibt ja den major scale tick an. Wie ich jetzt den wert umrechne um den entsprechenden wert aus der uhrezitliste zu ermitteln ist mir noch unklar. Oder gehst du davon aus das eine map zum einsatz kommt?
Wie kann ich den in der klasse YourScaleDraw auf die funktion valueToDate zugreifen??
Verstehe die funktionen QString valueToDate(double value)
double dataToValue(const QString &date)
sind die methoden einer klasse? auf was greifen die zu??
....
danke
Verfasst: 30. Juli 2010 12:53
von Uwe
hmm nicht wirklich, die methode valueToDate verstehe nicht wie die umrechnung funktioniert, ...
Solltest Du aber, denn genau das mußt Du Dir überlegen und implementieren.
Wenn Deine Zeitpunkte nur beliebige Beschriftungen darstellen, kannst Du das 1. Datum auf 1.0 das 2. auf 2.0 u.s.w umrechnen. Wenn Du Deine Zeitpunkte dagegen auf einer Zeitachse anordnen willst, könntest Du z.B. das erste Datum auf 0.0 abbilden und für alle anderen Zeitpunkte den Abstand zum ersten Datum in Sekunden ( oder was auch immer ) nehmen.
Wie kann ich den in der klasse YourScaleDraw auf die funktion valueToDate zugreifen??
Das war Pseudo Code - ob Du die Abbildung als globale Funktion oder als Member implementierst und wie Du Deine Klassen organisierst mußt Du schon selber entscheiden.
Uwe
Verfasst: 30. Juli 2010 13:23
von mensuez
Ah ok, habs glaub ich jetzt verstanden.
habs hinbekommen
Dank dir vielmals
