[GELÖST] probleme mit schleifen und "return app.exec&qu

Alles rund um die Programmierung mit Qt
LQ
Beiträge: 46
Registriert: 3. Oktober 2007 13:16

[GELÖST] probleme mit schleifen und "return app.exec&qu

Beitrag 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?
Zuletzt geändert von LQ am 14. Oktober 2007 14:15, insgesamt 2-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

QSplashScreen
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
LQ
Beiträge: 46
Registriert: 3. Oktober 2007 13:16

Beitrag von LQ »

äh, wie?
kannst du das etwas genauer erklären, plz?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Da ich nicht weiss was Du machen willst, dachte ich Du willst einen Splashscreen haben auf dem Du die Sekunden runterzählst.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
LQ
Beiträge: 46
Registriert: 3. Oktober 2007 13:16

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
LQ
Beiträge: 46
Registriert: 3. Oktober 2007 13:16

Beitrag von LQ »

aha, und wo und wie muss ich jetzt meinen timercode einfügen?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
LQ
Beiträge: 46
Registriert: 3. Oktober 2007 13:16

Beitrag 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...
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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.
LQ
Beiträge: 46
Registriert: 3. Oktober 2007 13:16

Beitrag 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

Code: Alles auswählen

return app.exec()
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.
dontinelli
Beiträge: 146
Registriert: 22. September 2006 20:53

Beitrag von dontinelli »

Wie Christian81 schon gesagt hast, kannst du das in dein MainWindow oder Dialog oder was halt immer packen.
LQ
Beiträge: 46
Registriert: 3. Oktober 2007 13:16

Beitrag 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?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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
QNoob
Beiträge: 10
Registriert: 13. September 2007 00:35

Beitrag von QNoob »

Hast du schon mal irgendetwas in C bzw. C++ programmiert?

Code: Alles auswählen

return app.exec()
calculatecode:
...
time_wait(1); 
"time_wait(1);" kann nie ausgeführt werden, wenn davor ein "return" steht.
Antworten