Seite 1 von 1

Signal nach app.exec() ??

Verfasst: 11. August 2006 12:26
von Sirhc
Hallo!
Ich habe folgende Frage, zu der ich inzwischen schon 1 1/2 tage google:

Mein Qt-Programm (QT vers 3.2) habe ich mit dem Designer erstellt und die Funktionalitiät in die *.ui.h - Datei gepackt. Da das Programm jetzt fast fertig ist, ist mir die Umstellung auf den Vererbungsansatz nun zu aufwendig.

Nun möchte ich nach der Erstellung des Dialoges, also nach Aufruf von app.exec() code ausführen, wenn ein bestimmter Parameter, den ich über argv() abfrage, mitgegeben wurde. Dieser Code beinhaltet eine "Endlosschleife" (bis ein button gedrückt wird), so daß er wenn er vor Aufruf der app.exec() ausgeführt würde diesen Aufruf blockierte.

Wo muß dieser Code hin?

Meine bisherigen Versuche haben sich mit der init() in der ui.h-Datei beschäftigt, doch wird die init ja bereits vor app.exec() ausgeführt -> daher leifert das Programm dann einen Fehler zur Laufzeit.

Wie muß ich das anders machen?

Verfasst: 11. August 2006 18:12
von upsala
Versuch's mal mit einem Event...

Verfasst: 11. August 2006 18:19
von Sirhc
Ja... nur weiß ich nicht und habe auch nach sehr langer Suche nicht herausfinden können, welches event ausgelöst wird, wenn exec() gestartet ist.
Ich habe das inzwischen etwas unschön gelöst, indem ich ein QTimer::singleShot in die init gesetzt habe - jetzt starte ich mein Program halt etwas zeitverzögert und etwas "dirty", aber es tut...

Verfasst: 11. August 2006 21:22
von upsala
So etwas in der Richtung meinte ich. Den Timer kannst du im übrigen auf 0 setzen.

Verfasst: 14. August 2006 08:59
von Sirhc
Ja mit 0 klappt das auch... warum? Muß ich ihm keine Zeit geben, die Oberfläche aufzubauen und anzuzeigen?

Verfasst: 14. August 2006 11:43
von Einmaliger
Sirhc hat geschrieben:Ja mit 0 klappt das auch... warum? Muß ich ihm keine Zeit geben, die Oberfläche aufzubauen und anzuzeigen?
Aus der Qt-Dokumentation zu QTimer:
As a special case, a QTimer with a timeout of 0 will time out as soon as all the events in the window system's event queue have been processed. This can be used to do heavy work while providing a snappy user interface
Er wartet also ab, bis alle GUI-Events (also insbesondere PaintEvents) abgeschlossen sind, und löst dann direkt den Timer aus.

Verfasst: 14. August 2006 11:59
von Sirhc
Perfekt!!!!
Genau das hatte ich ja gesucht!
Vielen Dank!
Von meiner Seite aus kann man diesen Thread als Solved o.ä. abschließen :-)