Vielen Dank für Deine Antwort!
Am einfachsten wäre es, wenn ich das funktionierende und das auf die beschriebene Weise erweiterte und abstürzende Programm jeweils als zip-Datei anhängen könnte. Beide Programme (jeweils 2 Header- und 3 Source-Files) oder nur das erweiterte in dieses Feld zu posten, wäre wohl weniger sinnvoll. Ich verstehe nicht, warum es heißt, daß das Kontingent für Dateianhänge bereits vollständig ausgenutzt ist, obwohl ich gar nichts anhängen konnte. Der Programmabsturz hängt meines Erachtens mit QThread zusammen und wird nicht leicht zu vermeiden sein.. Ohne die Verwendung von QThread habe ich aber das funktionierende Programm nicht zum Laufen gebracht. Die Quelldateien lauten
Code: Alles auswählen
#include <QtGui/QApplication>
#include "mainwidget.h"
#include <QtCore/QCoreApplication>
#include <iostream>
#include <iomanip>
#include <QtNetwork>
#include <QHttp>
#include "filedownloader.h"
#include <QString>
#include <QApplication>
#include <QObject>
using namespace std;
int main(int argc, char *argv[])
{
QApplication a( argc, argv );
char separator, step='d',tags;
QString symbol="^GDAXI";
int startDay=20,startMonth=6,startYear=2014,endDay=31, endMonth=12,endYear=2014,sM,eM;
sM=startMonth-1;
eM=endMonth-1;
QUrl histUrl(QString("http://ichart.finance.yahoo.com/table.csv?s=%1&a=%2&b=%3&c=%4&d=%5&e=%6&f=%7&g=step&y=0&ignore=.cvs").arg(symbol).arg(sM).arg(startDay).arg(startYear).arg(eM).arg(endDay).arg(endYear),QUrl::TolerantMode);
// FileDownloader demo(histUrl);
FileDownloader *demo = new FileDownloader(histUrl);
mainWidget w;
qDebug("11111111111mmmmmmmmmmmmmmmmmmmmmmm");
QObject::connect(demo,SIGNAL(DataA(const QByteArray&)),&w,
SLOT(Receiver(const QByteArray &)));
qDebug("22222222222222mmmmmmmmmmmmmmmmmmm");
demo->start();
w.show();
qDebug("zzzzzzzzzzzzzzzzzzzzz");
return a.exec();
}
Code: Alles auswählen
#include "filedownloader.h"
#include <iostream>
#include <QtDebug>
#include "mainwidget.h"
FileDownloader::FileDownloader(const QUrl &KUrl ) : kUrl(KUrl),QThread()
{qDebug("FFFFFFFFFFFFFFFFFFFFFF111111111111111111111");
connect(&m_WebCtrl, SIGNAL(finished(QNetworkReply*)),
SLOT(fileDownloaded(QNetworkReply*)));
QNetworkRequest request(kUrl);
m_WebCtrl.get(request);
qDebug("FFFFFFFFFFFFFFFFFFFFFF222222222222222222");
}
FileDownloader::~FileDownloader()
{
}
void FileDownloader::fileDownloaded(QNetworkReply* pReply)
{qDebug("FFFFFFFFFFFFFFFFFFFFFF33333333333333333333333333");
m_DownloadedData = pReply->readAll();
pReply->deleteLater();
emit downloaded();
//for(int i=0;i<10;i++){
emit DataA(m_DownloadedData);
// sleep(1);
//}
qDebug("FFFFFFFFFFFFFFFFFFFFFF4444444444444444444444444");
return ;
}
und
Code: Alles auswählen
#include "mainwidget.h"
#include <QtGui>
#include <QVector>
#include <cmath>
#include <QtDebug>
#include <iostream>
#include <QString>
#include <QLocale>
mainWidget::mainWidget()
{
setWindowTitle ( "paintEvent - Demo");
resize( 1000, 400 );
qDebug("11111111111wwwwwwwwwwwwwwwwwwwwwww");
}
void mainWidget::paintEvent ( QPaintEvent * event ) {
QPainter painter(this);
qDebug("2222222222222222222wwwwwwwwwwwwwwwwwwwwww");
painter.begin( this );
painter.setPen( QPen(Qt::blue, 2) );
painter.drawLine(0,300,1000,300);
int u,x1,ku=40,ku1=40,Vo=140,Vo1=140,AK=9500;
float Mult=0.7; //Ak sei ungefährer Kurs
qDebug("333333333333333wwwwwwwwwwwwwwwwwwwwww");
sleep(4);
Vecg=Volume.size()-2;
Groesse_CloseAdj=CloseAdj.size();
//PFE_gr=PFE.size();
QLocale german(QLocale::German, QLocale::Germany);
QString Vect_Str = german.toString(Vecg);
QString VectCloseAdj_Str = german.toString(Groesse_CloseAdj);
//QString PFE_Str=german.toString(PFE_gr);
qDebug("Dimension von Vecg=");
qDebug(qPrintable(Vect_Str));
qDebug("Dimension von Groesse_CloseAdj=");
qDebug(qPrintable(VectCloseAdj_Str));
//qDebug("Dimension von PFE_gr=");
//qDebug(qPrintable(PFE_Str));
for(int i=1;i<Vecg;i++)
{ u=i*8;
x1=8+8*i;
ku=300-(Close[Vecg-i]-AK)*Mult;
ku1=300-(Close[Vecg-i-1]-AK)*Mult;
painter.drawLine(u,ku,x1,ku1);
}
if(1>0) //Wenn 1>0 gesetzt wird, werden Open-Close,High-Close etc auch gezeichnet.
{ painter.setPen( QPen(Qt::magenta, 1) );
for(int i=1;i<Vecg;i++)
{ u=i*8;
x1=8+8*i;
ku=300-(CloseAdj[Vecg-i]-Close[Vecg-i])*Mult;
ku1=300-(CloseAdj[Vecg-i-1]-Close[Vecg-i-1])*Mult;
//painter.drawLine(u,ku,x1,ku1); //Ändern ??????????????????? Benötigt???????????
}
painter.setPen( QPen(Qt::blue, 2) );
for(int i=1;i<Vecg;i++)
{ u=i*8;
x1=8+8*i;
ku=300-(Close[Vecg-i]-AK)*Mult;
ku1=300-(Close[Vecg-i-1]-AK)*Mult;
painter.drawLine(u,ku,x1,ku1);
}
painter.setPen( QPen(Qt::yellow, 1) );
for(int i=1;i<Vecg;i++)
{ u=i*8;
x1=8+8*i;
ku=300-(High[Vecg-i]-Close[Vecg-i])*Mult;
ku1=300-(High[Vecg-i-1]-Close[Vecg-i-1])*Mult;
painter.drawLine(u,ku,x1,ku1);
}
painter.setPen( QPen(Qt::black, 1) );
for(int i=1;i<Vecg;i++)
{ u=i*8;
x1=8+8*i;
ku=300-(Low[Vecg-i]-Close[Vecg-i])*Mult;
ku1=300-(Low[Vecg-i-1]-Close[Vecg-i-1])*Mult;
painter.drawLine(u,ku,x1,ku1);
}
painter.setPen( QPen(Qt::green, 1) );
for(int i=1;i<Vecg;i++)
{ u=i*8;
x1=8+8*i;
ku=300-(Open[Vecg-i]-Close[Vecg-i])*Mult;
ku1=300-(Open[Vecg-i-1]-Close[Vecg-i-1])*Mult;
painter.drawLine(u,ku,x1,ku1);
}
}
qDebug("444444444444444444wwwwwwwwwwwwwwwwwwwwww");
painter.setPen( QPen(Qt::red, 1) );
for(int i=1;i<Vecg;i++)
{ u=i*8;
x1=8+8*i;
Vo=Volume[Vecg-i]/1000000;
Vo1=Volume[Vecg-i-1]/1000000;
painter.drawLine(u,Vo,x1,Vo1);
}
//sleep(6);
PFE_gr=PFE.size();
QString PFE_Str1=german.toString(PFE_gr);
qDebug("Dimension von PFE_gr22222222222=");
qDebug(qPrintable(PFE_Str1));
painter.setPen( QPen(Qt::magenta, 1) );
for(int i=0;i<PFE_gr-2;i++) // Vecg-11;i>0;i--)
{ku=int(250-PFE[i]);
ku1=int(250-PFE[i+1]);
u=8*i;
x1=8*i+8;
painter.drawLine(u,ku,x1,ku1);
}
painter.setPen(
QPen(Qt::black, 5, Qt::DotLine, Qt::RoundCap));
painter.drawRect( Koordinate,40,120,150 );
}
void mainWidget::Receiver(const QByteArray &QBA){
qDebug(QBA);
//std::cout<<"Fuer die Glaettung von PFE m=? n=?"<<std::endl;
//std::cin>>m,n;
qDebug("Receiver Receiver Receiver Receiver ");
groesseQBA=QBA.size();
if(groesseQBA>40){
qDebug("Receiver1 Receiver1 Receiver1 Receiver1 ");
int j=0;
while(QBA[j]!='2')
{j++;
}
QVector<QString> days;
for(int i=j;i<=groesseQBA;i++)
{QString day =" ";
QString volume = " ";
QString CloseAd =" ";
QString open = "";
QString high = "";
QString low ="";
QString close ="";
qint32 volume_=0;
float CloseA=0.0,Clos=0.0,Lo=0.0,Hig=0.0,Ope=0.0;
for (int k=0;k<10;k++)
{day+=QBA[i+k];
}
i+=9;
while(QBA[i]!=',')
{//qDebug(" Problem bis Komma ");
i++;
}
while(QBA[i+1]!=',')
{open+=QBA[i+1];
i++;}
while(QBA[i+2]!=',')
{high+=QBA[i+2];
i++;}
while(QBA[i+3]!=',')
{low+=QBA[i+3];
i++;}
while(QBA[i+4]!=',')
{close+=QBA[i+4];
i++;}
while(QBA[i+5]!=',')
{volume+=QBA[i+5];
i++;
}
while(((QBA[i+6]>='0' && QBA[i+6]<='9') || QBA[i+6]== '.')&& !(QBA[i+6]=='2' && QBA[i+7]=='0' && QBA[i+8]<='1' && QBA[i+9]<='5'))
{CloseAd+=QBA[i+6];
i++;
//qDebug(qPrintable(CloseAd));
}
i+=6;
CloseA=CloseAd.toFloat();
Clos=close.toFloat();
Lo=low.toFloat();
Hig=high.toFloat();
Ope=open.toFloat();
//std::cout<<"CloseA="<<CloseA<<std::endl;
days.append(day);
CloseAdj.append(CloseA);
Close.append(Clos);
High.append(Hig);
Open.append(Ope);
Low.append(Lo);
volume_=volume.toInt();
Volume.append(volume_);
}
Vecg=1;
Vecg=Volume.size();
std::cout<<"!!!!!!!!!!!!!!!Vecg="<<Vecg<<"GroesseQBA="<<groesseQBA<<std::endl;
for(int l=0;l<10;l++)
{QString tag=days[l];
qDebug(qPrintable(tag));
// float Cl_Pr=CloseAdj[l];
//std::cout<<Cl_Pr<<std::endl;
}
int IntP,Gr_PFE; //Diesen Teil habe ich neu hinzugefügt!
m=5.0;
n=10.0;
float KFQ=1000.0; //KFQ=KF*KF
float f1=(m-2.0)/(m+1.0);
float f2=2.0/(m+1.0);
for (int t=Vecg-10;t>-1;t--)
{N[t]=0;
Z[t]=sqrt((Close[t]-Close[t-n+1])*(Close[t]-Close[t-n+1])/KFQ+n*n);
if(Close[t]-Close[t-n+1]<0)
{Z[t]=-Z[t];}
for(int i=0;i<n-1;i++)
{N[t]+=sqrt((Close[t-i]-Close[t-i-1])*(Close[t-i]-Close[t-i-1])/KFQ+1);
}
//std::cout<<" Z="<<Z[t]<<" N[t]="<<N[t]<<std::endl;
if(t==Vecg-10)
{IntP=int(Z[Vecg-10]*100.0/N[Vecg-10]);
PFE.append(IntP);
}else{
IntP=int(f1*PFE[Vecg-11-t]+f2*100.0*Z[t]/N[t]);
PFE.append(IntP);
}
Gr_PFE=PFE.size();
std::cout<<" t="<<t<<" PFE["<<Vecg-10-t<<"]="<<PFE[Vecg-10-t]<<" Z="<<Z[t]<<" N="<<N[t]<<" f1="<<f1<<" f2="<<f2<<" Gr.v.PFE="<<Gr_PFE<<std::endl;
}
}
Koordinate=160;
return;
}
Vor dem Hinzufügen von
Code: Alles auswählen
int IntP,Gr_PFE;
m=5.0;
n=10.0;
float KFQ=1000.0; //KFQ=KF*KF
float f1=(m-2.0)/(m+1.0);
float f2=2.0/(m+1.0);
for (int t=Vecg-10;t>-1;t--)
{N[t]=0;
Z[t]=sqrt((Close[t]-Close[t-n+1])*(Close[t]-Close[t-n+1])/KFQ+n*n);
if(Close[t]-Close[t-n+1]<0)
{Z[t]=-Z[t];}
for(int i=0;i<n-1;i++)
{N[t]+=sqrt((Close[t-i]-Close[t-i-1])*(Close[t-i]-Close[t-i-1])/KFQ+1);
}
//std::cout<<" Z="<<Z[t]<<" N[t]="<<N[t]<<std::endl;
if(t==Vecg-10)
{IntP=int(Z[Vecg-10]*100.0/N[Vecg-10]);
PFE.append(IntP);
}else{
IntP=int(f1*PFE[Vecg-11-t]+f2*100.0*Z[t]/N[t]);
PFE.append(IntP);
}
Gr_PFE=PFE.size();
std::cout<<" t="<<t<<" PFE["<<Vecg-10-t<<"]="<<PFE[Vecg-10-t]<<" Z="<<Z[t]<<" N="<<N[t]<<" f1="<<f1<<" f2="<<f2<<" Gr.v.PFE="<<Gr_PFE<<std::endl;
}
und
Code: Alles auswählen
PFE_gr=PFE.size();
QString PFE_Str1=german.toString(PFE_gr);
qDebug("Dimension von PFE_gr22222222222=");
qDebug(qPrintable(PFE_Str1));
painter.setPen( QPen(Qt::magenta, 1) );
for(int i=0;i<PFE_gr-2;i++) // Vecg-11;i>0;i--)
{ku=int(250-PFE[i]);
ku1=int(250-PFE[i+1]);
u=8*i;
x1=8*i+8;
painter.drawLine(u,ku,x1,ku1);
}
ist (wie schon oben erwähnt) das Programm gelaufen ohne abzustürzen. Die Headerdatei mit QThread lautet
Code: Alles auswählen
#ifndef FILEDOWNLOADER_H
#define FILEDOWNLOADER_H
#include <QtCore/QCoreApplication>
#include <QObject>
#include <QByteArray>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QList>
#include <QVector>
#include <cmath>
#include <QThread>
class FileDownloader : public QThread
{
Q_OBJECT
public:
FileDownloader(const QUrl &KUrl);
virtual ~FileDownloader();
signals:
void downloaded();
void DataA(const QByteArray &m_DownloadedData);
void downloadFinished(const QByteArray &data);
// private slots:
public slots:
void fileDownloaded(QNetworkReply* pReply);
private:
QUrl kUrl;
QNetworkAccessManager m_WebCtrl;
QByteArray m_DownloadedData;
};
#endif // FILEDOWNLOADER_H