ich habe folgende Frage an euch, wie würdet ihr es realisieren, dass man aus einem Datenstrom, der jede Sekunde neu rein kommt und wo die einzelnen Daten schon vorliegen eine Kurve zeichnet bzw den neuen Teil anhängt? achso und eine skala für die einheiten würde auch noch dazu kommen...
ganz unten in der addData sind die einkommenden Daten, ich will die nord ost verteilung als x y darstellen....aktuell zeichnet er nur die fkt
xval = double(i) * 10.0 / double(Size - 1);
yval = sin(xval) * cos(3.0 * xval);
...und dies auch schon vorher, also nicht in echtzeit so wie ich es gerne hätte mit den daten aus dem datenstrom
wäre für jeden ratschlag oder hilfe sehr dankbar!!!
plot.h
#ifndef PLOT_H
#define PLOT_H
#include <qframe.h>
#include <qwt_scale_map.h>
#include <qwt_plot_curve.h>
class Plot : public QFrame
{
Q_OBJECT
public:
Plot(QWidget*parent);
protected:
#if QT_VERSION >= 0x040000
virtual void paintEvent(QPaintEvent *);
#endif
void drawContents(QPainter *p);
public:
void addData(const QString &, const QString &, const QString &,const QString &, const QString &);
private:
#if QT_VERSION >= 0x040000
enum {CurvCnt = 2};
#else
enum {CurvCnt = 1};
#endif
enum {Size = 27};
QwtPlotCurve crv[CurvCnt];
//
// Arrays holding the values
//
double xval[Size];
double yval[Size];
QwtScaleMap xMap;
QwtScaleMap yMap;
};
#endif
plo.cpp
#include <qapplication.h>
#include <qframe.h>
#include <qwt_scale_map.h>
#include <qwt_plot_curve.h>
#include <qwt_symbol.h>
#include <qcolor.h>
#include <qpainter.h>
#if QT_VERSION >= 0x040000
#include <qpaintengine.h>
#endif
#include <math.h>
#include <QString>
#include "Plot.h"
#include "Plot.moc"
const int Size = 27;
Plot::Plot(QWidget *parent)
{
int i;
setWindowTitle(tr("Wild_ABS"));
setMinimumSize(160, 160);
resize(480, 220);
xMap.setScaleInterval(-0.5, 10.5);
yMap.setScaleInterval(-1.1, 1.1);
//
// Werte übertragen
//
for(i=0; i<Size;i++)
{ xval = double(i) * 10.0 / double(Size - 1);
yval = sin(xval) * cos(3.0 * xval);
}
//
// define curve styles
//
QwtSymbol sym;
i = 0;
#if QT_VERSION >= 0x040000
crv.setPen(QColor(Qt::darkBlue));
crv.setStyle(QwtPlotCurve::Lines);
crv[i].setRenderHint(QwtPlotItem::RenderAntialiased);
i++;
#endif
//
// attach data
//
for(i=0;i<CurvCnt;i++)
crv[i].setRawData(xval,yval,Size);
}
#if QT_VERSION >= 0x040000
void Plot::paintEvent(QPaintEvent *event)
{
QFrame::paintEvent(event);
QPainter painter(this);
painter.setClipRect(contentsRect());
drawContents(&painter);
}
#endif
//
// REDRAW CONTENTS
//
void Plot::drawContents(QPainter *painter)
{
int i;
QRect r = contentsRect();
//
// draw curves
//
for (int i=0;i<CurvCnt;i++)
{
xMap.setPaintInterval(r.left(), r.right());
yMap.setPaintInterval(r.top(), r.bottom());
#if QT_VERSION >= 0x040000
const QPaintEngine *pe = painter->device()->paintEngine();
if (pe->hasFeature(QPaintEngine::Antialiasing) )
{
painter->setRenderHint(QPainter::Antialiasing,
crv[i].testRenderHint(QwtPlotItem::RenderAntialiased) );
}
#endif
crv[i].draw(painter, xMap, yMap, r);
}
}
void Plot::addData(const QString &marker, const QString &north, const QString &east, const QString &hight, const QString &satcount){
printf("\n%.10s:%.5s:%.5s:%.5s:%.5s%",marker.toLatin1().data(), north.toLatin1().data(),east.toLatin1().data(),hight.toLatin1().data(),satcount.toLatin1().data());
}