[gelöst]QTimer läuft nicht!
Verfasst: 29. Juni 2007 13:03
hi!
Möchte für einen qwt plot, der später kontiniuerlich Daten bekommen soll einen Daten-generator bauen, der alle paar ms neue Daten in ein QVector schreibt.
Anscheinend wird der QTimer auch ordentlich angeschmissen (isActive gibt true zurück). Aber irgendwie will der keine events schmeißen..
Was hab ich falsch gemacht? Laut QTReferenz müsste das so klappen!?
Sitze nun schon 2 tage an dem Sch.... und komme nicht wirklich vorwärts!
main:
ObjectContainer.h
Objectcontainer.cpp:
data_generator.h:
data_generator.cpp:
jemand eine Idee? ich vermute momentan, dass ich das irgendwie Threaden muss... bin aber nicht sicher. Terminiert der einfach das Programm, bevor der QTimer das erste mal greift? wenn ja wieso?
Möchte für einen qwt plot, der später kontiniuerlich Daten bekommen soll einen Daten-generator bauen, der alle paar ms neue Daten in ein QVector schreibt.
Anscheinend wird der QTimer auch ordentlich angeschmissen (isActive gibt true zurück). Aber irgendwie will der keine events schmeißen..
Was hab ich falsch gemacht? Laut QTReferenz müsste das so klappen!?
Sitze nun schon 2 tage an dem Sch.... und komme nicht wirklich vorwärts!
main:
Code: Alles auswählen
int main(int argc, char **argv)
{
QApplication a(argc, argv);
Objectcontainer oc;
return a.exec();
}Code: Alles auswählen
#ifndef _Objectcontainer_H
#define _Objectcontainer_H
#include <QVector>
#include <QObject>
class Objectcontainer :public QObject
{
Q_OBJECT
public: Objectcontainer();
private:
QVector<double> yVector;
QVector<double> xVector;
};
#endif
Code: Alles auswählen
#include "Objectcontainer.h"
#include "data_generator.h"
//speichert die Vectoren und erzeugt einen data generator und übergibt diesem die vektorenweiter
Objectcontainer::Objectcontainer()
{
xVector.append(323.4244);
yVector.append(8578.4244);
data_generator data_gen(xVector,yVector);
//hier plot erzeugen und vektoren übergeben
}Code: Alles auswählen
#ifndef _data_generator_H
#define _data_generator_H
#include <QVector>
#include <QObject>
#include <QTimer>
#include <QWidget>
class data_generator : public QObject
{
Q_OBJECT
public:
data_generator(QVector<double> , QVector<double>);
QTimer *timer;
public slots:
void timerevent();
private:
double time;
int timerInterval;
QVector<double> *yVectorPtr;
QVector<double> *xVectorPtr;
};
#endif
Code: Alles auswählen
#include "data_generator.h"
#include <qwt_math.h>
#include <iostream>
#include <QTimer>
using namespace std;
//Raptor_data_generator soll die Vektoren vom Objectcontainer annehmen und die
//Referenzen speichern
data_generator::data_generator(QVector<double> xVec, QVector<double> yVec){
xVectorPtr = &xVec;
yVectorPtr = &yVec;
cout << "adr. von xVec : " << &xVec << "inhalt: " << xVec.at(0) <<"\n";
cout << "adr. von yVec : " << &yVec << "inhalt: " << yVec.at(0) <<"\n";
cout << "adr. von xVectorPtr : " << xVectorPtr << "inhalt: " << xVectorPtr->at(0) <<"\n";
cout << "adr. von yVectorPtr : " << yVectorPtr << "inhalt: " << yVectorPtr->at(0) <<"\n";
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(timerevent()));
//timer->setSingleShot(false);
timerInterval = 500; //alle 500ms einen neuen Wert!
timer->setInterval(timerInterval);
time = 0.0; //vergangeneZeit für x-Achse
cout <<"Starte Timer" <<"\n";
timer->start();
cout <<timer->isActive() <<"\n";
//bis hier alles klar!
}
void data_generator::timerevent(){ //bei jedem Event:
double randomValue = (double) rand();
xVectorPtr->append(time);
yVectorPtr->append(randomValue);
time += 0.001*timerInterval; //ms -> sek umrechnen
cout << "data " << randomValue <<"/ " <<time <<" appended, Vector-Kapazitaet: " << yVectorPtr->capacity() << "anz. der Objekte pro Vek: " <<yVectorPtr->size() <<"\n";
}
jemand eine Idee? ich vermute momentan, dass ich das irgendwie Threaden muss... bin aber nicht sicher. Terminiert der einfach das Programm, bevor der QTimer das erste mal greift? wenn ja wieso?