Erste Aktion nach Programmstart

Alles rund um die Programmierung mit Qt
Antworten
Tilman Räger
Beiträge: 189
Registriert: 6. Juni 2007 15:23
Wohnort: Göttingen

Erste Aktion nach Programmstart

Beitrag von Tilman Räger »

Hallo,

Gibt es die Möglichkeit eine Funktion im Hauptfenster der Anwendung auszuführen, nachdem dieses angezeigt wurde, aber noch bevor das Programm wirklich zu laufen beginn?
Also das das Hauptfenster der Anwendung korrekt angezeigt wird, bevor das Programm mit den nötigen Initialisierungen (Datenbank-Verbindung aufbauen, weitere Threads starten etc.) beginnt.

Wenn ich diese Initialisierungen im constructor mache, habe ich das Problem das bei Fehlschlagen der Initialisierung das Programm entweder nur kurz aufblitzt und dann wieder weg ist, oder ich habe eine Messagebox die irgendwie im Raum hängt. Beides nicht wirklich prickelnd.
Wenn ich die Initialisierungen aus dem Constructor herausnehme, und die Initialisierung zwischen den Show-Befehl und dem QApplication::exec-Befehl setze, wird zwar das Fenster angezeigt, allerdings nur der Rahmen.

Ich bräuchte also ein Event / Signal o.ä. das automatisch an das Hauptfenster geschickt wird, so das es das erste ist, was das Hauptfenster nach der Anzeige mitbekommt. Gibt es so etwas?

Gruss
Tilman Räger
veeman
Beiträge: 277
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: Erste Aktion nach Programmstart

Beitrag von veeman »

Code: Alles auswählen

QTimer::singleShot(0, this, SLOT(deinslot()));
Im Konstruktor aufrufen. Wird bei der nächsten Möglichkeit im EventLoop ausgeführt.
Tilman Räger
Beiträge: 189
Registriert: 6. Juni 2007 15:23
Wohnort: Göttingen

Re: Erste Aktion nach Programmstart

Beitrag von Tilman Räger »

Danke,
einen ähnlichen Gedanken hatte ich auch schon, war mir aber nicht sicher, ob es wirklich der Weisheit letzter Schluss ist.

Gruss
Tilman
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Erste Aktion nach Programmstart

Beitrag von RHBaum »

für 99,99 % der Fälle ist es ausreichend.
Am Ende machst dir aber ne EIgentschaft der Qt Messagequeue zu nutze, die man auch wahrscheinlich auch umstellen kann (Ob das jemals wer macht, und ob Qt an der Stelle das verhalten mal ändert, eher unwahrscheinlich).
Schlimmstenfalls bekommst dein signal mal bevor das fenster fertig gezeichnet wurde.

(Qt implementiert Signal/SLots ebenfalls ueber die eventqueue)
Willst ne noch sicherere Lösung mit mehr Kontrolle, kannst dich an die Kommunikation der QT elemente hängen und darauf reagieren.
QEvent::Polish ist da nen heisser Kandidat :-)
Um das zu entkoppeln und die Eventqueue zu steuern schickst dann am besten nen eigenes Event (User+X), mit Prio lowest und hängst es hinten an die Queue an (QApplikation/qApp ist der Owner der Eventqueue des Mainthreads).
Mit der Methode hasst ne Menger mehr Kontrollmöglichkeiten und ist auch in 10 min erledigt.
Aber liest sich nicht so intuitiv wie die timer methode ....

Ciao ...
Antworten