qDebug() << ""; ändert mein Ergebnis?!
qDebug() << ""; ändert mein Ergebnis?!
Hallo,
Ich bin gerade dabei, eine Funktion zu schreiben, die in meinem Programm die Arbeitszeit aus Stempelsätzen errechnet zu programmieren.
Wie auch immer, mit tollen Funktionen von qt kann man wunderbar die Sekunden errechnen und tun was man will.
Wie auch immer, das sollte für mein Problem doch eigentlich uninteressant sein:
ABER, was gibt es für ein Grund, dass meine Funktion mit dem Befehl "qDebug() << "";" das richtige ausgibt, und wenn Ich den Befehl auskommentiere die Funktion nicht mehr funktioniert?
Ich finde es stark verwirrend, da qDebug() ja nix verändert, sondern nur irwas im Debug anzeigen lassen kann. Desswegen habe Ich gedacht, dass Ich meinen Code nicht posten muss.
Aber Ich werde mich bemühen, wenn jemand doch meint, es könnte mit meinem Code zusammenhängen...(wobei das muss es ja eigentlich, kanns aber doch nicht sein?!)
Ich währe sehr dankbar, wenn Ihr mir in dieser Verwirrung etwas Klarheit bringen könntet.
Grüße Marius
Ich bin gerade dabei, eine Funktion zu schreiben, die in meinem Programm die Arbeitszeit aus Stempelsätzen errechnet zu programmieren.
Wie auch immer, mit tollen Funktionen von qt kann man wunderbar die Sekunden errechnen und tun was man will.
Wie auch immer, das sollte für mein Problem doch eigentlich uninteressant sein:
ABER, was gibt es für ein Grund, dass meine Funktion mit dem Befehl "qDebug() << "";" das richtige ausgibt, und wenn Ich den Befehl auskommentiere die Funktion nicht mehr funktioniert?
Ich finde es stark verwirrend, da qDebug() ja nix verändert, sondern nur irwas im Debug anzeigen lassen kann. Desswegen habe Ich gedacht, dass Ich meinen Code nicht posten muss.
Aber Ich werde mich bemühen, wenn jemand doch meint, es könnte mit meinem Code zusammenhängen...(wobei das muss es ja eigentlich, kanns aber doch nicht sein?!)
Ich währe sehr dankbar, wenn Ihr mir in dieser Verwirrung etwas Klarheit bringen könntet.
Grüße Marius
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: qDebug() << ""; ändert mein Ergebnis?!
Ohne Quellcode so dass man sieht was Du genau machst, wird das schwierig. Zumal 'nicht mehr funktioniert' eine recht schwammige Aussage ist.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: qDebug() << ""; ändert mein Ergebnis?!
Ok, hier der code der Funktion:
Bzw. hier der Aufruf:
//qsazeit wird dann nur noch in nem html-String eingesetzt, um dann die Daten ausdrucken zu können.
Und hier die Funktion;
Problembeschreibung:
-Wenn Ich dieses zuletzt aufgerufene qDebug() drinnen lasse, funktioniert die Funktion wie gewollt und gibt zum Beispiel 0,25 aus.
-Wenn Ich aber dieses qDebug() auskommentiere, dann kommt nur noch die Zahl 0 auf meinem Ausdruck an.
Bzw. hier der Aufruf:
Code: Alles auswählen
int iazeit = qRound(getazeitfromdate1to2()*100);
QString qsazeit = QString::number(iazeit/100.0);Und hier die Funktion;
Code: Alles auswählen
float MainWindow::getazeitfromdate1to2()
{
QStringList qslIPK;
QSqlQuery qry(db);
float farbeitszeitpluspauseinsec;
float fpausenzeitinsec;
float fabsolutarbeitszeitinsec;
float fabsolutarbeitszeitinhours;
qslIPK=getallfertigvollstaendigeIPKfd1t2();
qDebug()<< "fertigvollstaendigvon1nach2= " << qslIPK;
for(int i=0; i<qslIPK.size(); i++)
{
qry.prepare("SELECT arbeitstart, arbeitende, pausestart, pauseende, status FROM Stempelsatz WHERE IPK="+qslIPK.at(i));
qry.exec();
qry.next();
if(qry.value(4).toString()=="Arbeit beendet")
{
//qDebug() << "Arbeitsipk= " << qslIPK.at(i);
farbeitszeitpluspauseinsec = farbeitszeitpluspauseinsec + qry.value(0).toTime().secsTo(qry.value(1).toTime());
}
if(qry.value(4).toString()=="Pause beendet")
{
//qDebug() << "Pausenipk= " << qslIPK.at(i);
fpausenzeitinsec = fpausenzeitinsec + qry.value(2).toTime().secsTo(qry.value(3).toTime());
}
//qDebug() << "des isch d last= " << qry.lastQuery();
}
fabsolutarbeitszeitinsec = farbeitszeitpluspauseinsec - fpausenzeitinsec;
fabsolutarbeitszeitinhours = fabsolutarbeitszeitinsec/3600;
//+++++++++++++++++++++++++++++++qDebug() drinn lassen!!!!!Warum?keine Ahnung!!!
qDebug() <<"";//izwischen;//<< arbeitszeitpluspauseinsec;
//++++++++++++++++++++++++++++++/
return fabsolutarbeitszeitinhours;
}Problembeschreibung:
-Wenn Ich dieses zuletzt aufgerufene qDebug() drinnen lasse, funktioniert die Funktion wie gewollt und gibt zum Beispiel 0,25 aus.
-Wenn Ich aber dieses qDebug() auskommentiere, dann kommt nur noch die Zahl 0 auf meinem Ausdruck an.
Re: qDebug() << ""; ändert mein Ergebnis?!
Ich weiß nicht, ist das Programm ansich verständlich?
so grob:
-Erst hole Ich mit einer Funktion oben die IPK aus einer QSQlite-Datenbank.
-diese beinhalten Arbeitssätze und Pausensätze. Diese beinhalten jeweils eine Start- und Endezeit.
-Ich muss also die Zeit berechnen von dem Zeitpunkt zu dem sich eine Person eingestempelt und wieder ausgestempelt hat.
->dazwischen kann die Person beliebig viele Pausensätze haben. Diese muss Ich von der Gesammtzeit abziehen.
-unterschieden werden die Sätze mit der Tabellenspalte(4) mit "Arbeit beendet" oder "Pause beendet".
Ich hoffe Ich konnte den Code somit verdeutlichen.
so grob:
-Erst hole Ich mit einer Funktion oben die IPK aus einer QSQlite-Datenbank.
-diese beinhalten Arbeitssätze und Pausensätze. Diese beinhalten jeweils eine Start- und Endezeit.
-Ich muss also die Zeit berechnen von dem Zeitpunkt zu dem sich eine Person eingestempelt und wieder ausgestempelt hat.
->dazwischen kann die Person beliebig viele Pausensätze haben. Diese muss Ich von der Gesammtzeit abziehen.
-unterschieden werden die Sätze mit der Tabellenspalte(4) mit "Arbeit beendet" oder "Pause beendet".
Ich hoffe Ich konnte den Code somit verdeutlichen.
Re: qDebug() << ""; ändert mein Ergebnis?!
Oder soll Ich einfach die Funktion löschen und neu schreiben in der Hoffnung, dass Ich dann etwas anderst mache? 
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: qDebug() << ""; ändert mein Ergebnis?!
Wenn es keinen Status 'Pause beendet' gibt, ist fpausenzeitinsec uninitialisiert und es kommt Müll zurück.
/edit: Die Variablen am Funktionsanfang zu definieren ist etwas unübersichtlich und die Variablennamen etwas lang. Float für Sekunden zu benutzen ist auch nicht wirklich sinnig - 6 Stellen Genauigkeit macht 1000000s/60/60 = 277h ... ein integer wäre hier viel sinnvoller
/edit: Die Variablen am Funktionsanfang zu definieren ist etwas unübersichtlich und die Variablennamen etwas lang. Float für Sekunden zu benutzen ist auch nicht wirklich sinnig - 6 Stellen Genauigkeit macht 1000000s/60/60 = 277h ... ein integer wäre hier viel sinnvoller
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: qDebug() << ""; ändert mein Ergebnis?!
Hallo,
danke für die Antwort.
Jap, das kann Ich bestätigen, hab ähnliches gerade nochmal nachprogrammiert und ohne Initialisierung kam da echt komisches zeug
Ich bin mir noch nicht ganz einig, wie Ich sie sinnvoll kurz benennen soll, hab noch nicht so viel Erfahrung...
Ja ok, evtl. bin Ich zu früh auf float umgestigen...aber später muss Ich es doch spätestens wenn Ich die Sekunden durch 60/60 für Stunden teile oder nicht?! Also Ich hab ja dann Kommazahlen.
Das heißt, man kann es Zufall nennen, wie qDebug() in meinen Daten rumwurschtelt, da sie nicht initialisert wurden?
danke für die Antwort.
Jap, das kann Ich bestätigen, hab ähnliches gerade nochmal nachprogrammiert und ohne Initialisierung kam da echt komisches zeug
Ich bin mir noch nicht ganz einig, wie Ich sie sinnvoll kurz benennen soll, hab noch nicht so viel Erfahrung...
Ja ok, evtl. bin Ich zu früh auf float umgestigen...aber später muss Ich es doch spätestens wenn Ich die Sekunden durch 60/60 für Stunden teile oder nicht?! Also Ich hab ja dann Kommazahlen.
Das heißt, man kann es Zufall nennen, wie qDebug() in meinen Daten rumwurschtelt, da sie nicht initialisert wurden?
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: qDebug() << ""; ändert mein Ergebnis?!
Ja, es war purer Zufall - je nachdem wie der Stack beim Aufruf der Funktion gerade gefüllt war. Ggf. wurde aufgrund des zusätzlichen Aufrufs irgendwas anders angeordnet und die Variable war korrekt mit 0 initialisiert.
Ich würde die Funktion so schreiben:
Die Namensgebung habe ich mal aussen vor gelassen. In der DB würde ich für den Status keinen String benutzen sondern eine Id - bei Strings ist es schnell passiert dass z.B. die Groß-/Kleinschreibung anders ist oder ein Typo drin ist. Außerdem würde ich in der DB keine QTime speichern sondern direkt die Sekunden (entweder time_t - also seit 01.01.1970 oder seit 00:00) - das ist wesentlich einfacher zu handhaben.
Ich würde die Funktion so schreiben:
Code: Alles auswählen
double getAzeitFromDate1to2()
{
qint64 farbeitszeitpluspauseinsec = 0;
qint64 fpausenzeitinsec = 0;
const QStringList qslIPK = getAllFertigVollstaendigeIPKfd1t2();
qDebug() << "fertigvollstaendigvon1nach2= " << qslIPK;
QSqlQuery qry(m_db);
qry.prepare("SELECT arbeitstart, arbeitende, pausestart, pauseende, status FROM Stempelsatz WHERE IPK=:ipk");
for(int i=0; i<qslIPK.size(); i++)
{
qry.bindValue(":ipk", qslIPK.at(i));
if (!qry.exec() || !qry.next())
{
qWarning("Help... - wrong id given?");
continue;
}
const QString state = qry.value(4).toString();
// Texte als state? mhhh ...
if(state == "Arbeit beendet")
{
const QTime start = qry.value(0).toTime();
const QTime end = qry.value(1).toTime();
//qDebug() << "Arbeitsipk= " << qslIPK.at(i);
farbeitszeitpluspauseinsec += start.secsTo(end);
} else if(state == "Pause beendet")
{
const QTime start = qry.value(2).toTime();
const QTime end = qry.value(3).toTime();
//qDebug() << "Pausenipk= " << qslIPK.at(i);
fpausenzeitinsec += start.secsTo(end);
}
//qDebug() << "des isch d last= " << qry.lastQuery();
}
qint64 fabsolutarbeitszeitinsec = farbeitszeitpluspauseinsec - fpausenzeitinsec;
double fabsolutarbeitszeitinhours = fabsolutarbeitszeitinsec / 3600.; // 3600. -> implizite Konvertierung in double
return fabsolutarbeitszeitinhours;
}
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: qDebug() << ""; ändert mein Ergebnis?!
vielen Dank Christian81,
Ich würde sagen, mein Problem ist geklärt bzw. der direkte Fehler war, dass Ich keine Initialisierung gemacht hab.
Jedoch konnte Ich zusätzlich von deinem Beispiel das ein oder andere dazulernen damit mein Programm einem besseren Programmierstil näher kommt.
Kann man ein Thema auch als "gelöst" oderso markieren? Ich find nix.
Grüße Marius
Ich würde sagen, mein Problem ist geklärt bzw. der direkte Fehler war, dass Ich keine Initialisierung gemacht hab.
Jedoch konnte Ich zusätzlich von deinem Beispiel das ein oder andere dazulernen damit mein Programm einem besseren Programmierstil näher kommt.
Kann man ein Thema auch als "gelöst" oderso markieren? Ich find nix.
Grüße Marius