Seite 1 von 2
[GELÖST] probleme mit schleifen und "return app.exec&qu
Verfasst: 12. Oktober 2007 17:05
von LQ
ich brauch in meinem programm einen kleinen countdown, der jede sekunde zählt. da gibt es aber nich ein kleines problem.
wenn ich meine schleife (mit time_wait & goto xyz) VOR return app.exec
schreibe, dann berechnet er zwar brav, aber man sieht davon nicht viel. wenn ich es nach return app.exec schreibe, wird es komplett ignoriert.
wie kann ich nach dem start des programms (und damit meine ich nicht zub. mainWindow.show()) noch aktionen vornehmen?
Verfasst: 12. Oktober 2007 17:36
von Christian81
QSplashScreen
Verfasst: 12. Oktober 2007 17:43
von LQ
äh, wie?
kannst du das etwas genauer erklären, plz?
Verfasst: 12. Oktober 2007 17:56
von Christian81
Da ich nicht weiss was Du machen willst, dachte ich Du willst einen Splashscreen haben auf dem Du die Sekunden runterzählst.
Verfasst: 12. Oktober 2007 18:11
von LQ
nein, im Hauptprogramm wird ein countdown angezeigt, der jede sekunde aktualisiert. er beginnt bei 0 und zält solange hoch, bis das programm beendet wird.
Verfasst: 12. Oktober 2007 18:12
von Christian81
Da die Eventloop (und damit auch alle Timer, Signals & Slots, ...) erst nach QCoreApplication::exec() losgeht wird es früher nichts mit zählen.
Verfasst: 12. Oktober 2007 18:25
von LQ
aha, und wo und wie muss ich jetzt meinen timercode einfügen?
Verfasst: 12. Oktober 2007 18:39
von Christian81
Ich würde es in das MainWindow einbauen. Im ctor den Timer starten und dann das Signal auch gleich im MainWindow abfangen und verarbeiten.
Verfasst: 12. Oktober 2007 19:03
von LQ
dasproblem ist nur, dass der timer aus verschiedenen werten aus der registery aufgebaut ist und ausserdem jede sekunde die systemzeit neu eingelesen werden muss, damit das so funzt wie ich es brauch...
Verfasst: 12. Oktober 2007 20:08
von upsala
Jetzt lies dir noch mal in Ruhe das durch, was du uns hingeschrieben hast und überlegst dir ob das auch jemand,der dein Vorhaben nicht kennt verstehen kann.
Verfasst: 12. Oktober 2007 20:21
von LQ
ok, ich versuchs mal verständlicher zu formulieren.
Das Programm besteht aus 2 teilen:
1. Der Konfiurator:
Hier gibt man ein oder mehrere gewünschte(s) Datum(s) mit Uhrzeit ein. Dieser Speichert das eingegebene in der Registry ab.
2. Das Hauptprogramm
Hier werden die werte aus der registry ausgelesen und in sekunden umgerechnet. dann wird dass aktuelle datum und die aktuelle zeit eingelesen und in sekunden umgerechnet. mit der days.to funktion werden daraus dann die sekunden bis zum gewünschten datum(s) angezeigt.
Das Funktioniert so weit, dass bei jedem Programmstart alles brach eingelesen wird. Es soll aber jede Sekunde neu eingelesen, berechnet und ausgegeben werden.
Und jetzt zum
Problem:
Wenn ich die schleife mit dem zuständigen code VOR der Zeile
platziere, dann hängt sich das programm auf, da er ja in der schleife hängt und nicht zum exec() kommt.
Wenn ich es danach platziere, wird es schlicht und einfach ignoriert.
Wo muss ich die Schleife reinschreiben, damit sie jede sekunde ausgeführt wird. (das mit jede sekunde hab ich gelöst, blos wird es entweder nicht angezeigt oder komplett ignoriert.)
--------------------------------------------------------------
So, ich hoffe das war jetzt verständlich genung.
Verfasst: 12. Oktober 2007 20:39
von dontinelli
Wie Christian81 schon gesagt hast, kannst du das in dein MainWindow oder Dialog oder was halt immer packen.
Verfasst: 12. Oktober 2007 20:54
von LQ
und wo genau?
ich hab genau 3 dateien in meinem projekt:
-ui_Config.h
-ui_Main.h
-main.cpp
diebeiden Header wurden vom uic erstellt, die hab ich nicht angerührt.
die main.cpp sieht etwa so aus:
Code: Alles auswählen
#include...
void time_wait (...)
{
[...]
}
int main (...)
{
QApplication app;
QMainWindow mainWindow;
Ui::mainWindow ui;
ui.setupUi(&mainWindow);
[...] //Code der vor dem erscheinen des Interface abgearbeitet wird.
mainWindow.show();
calculatecode:
[...]
time_wait(1);
goto calculatecode;
return app.exec()
wenn ich es so mache, dann sieht man nix ausser ein mainwindow mit dem interface und einer sanduhr (der mauszeiger)
Code: Alles auswählen
#include...
void time_wait (...)
{
[...]
}
int main (...)
{
QApplication app;
QMainWindow mainWindow;
Ui::mainWindow ui;
ui.setupUi(&mainWindow);
[...] //Code der vor dem erscheinen des Interface abgearbeitet wird.
mainWindow.show();
return app.exec()
calculatecode:
[...]
time_wait(1);
goto calculatecode;
wenn ich es so mach, dann wird alles hinter "return app.exec()" ignoriert und ich bekomm ein programm bei dem ich nur auf den ende button klicken kann.
wo in diese dateit GENAU muss ich den "caluclatecode" hinstecken?
Verfasst: 12. Oktober 2007 21:01
von upsala
ctor ist die Abkürzung für Constructor also auf Deutsch Konstruktor. Da QT sehr stark auf C++ basiert sind dies Grundlagen und sollten hier nicht weiter besprochen werden.
EOT
Verfasst: 12. Oktober 2007 21:11
von QNoob
Hast du schon mal irgendetwas in C bzw. C++ programmiert?
"time_wait(1);" kann nie ausgeführt werden, wenn davor ein "return" steht.