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
Erste Aktion nach Programmstart
-
- Beiträge: 189
- Registriert: 6. Juni 2007 15:23
- Wohnort: Göttingen
Re: Erste Aktion nach Programmstart
Code: Alles auswählen
QTimer::singleShot(0, this, SLOT(deinslot()));
-
- Beiträge: 189
- Registriert: 6. Juni 2007 15:23
- Wohnort: Göttingen
Re: Erste Aktion nach Programmstart
Danke,
einen ähnlichen Gedanken hatte ich auch schon, war mir aber nicht sicher, ob es wirklich der Weisheit letzter Schluss ist.
Gruss
Tilman
einen ähnlichen Gedanken hatte ich auch schon, war mir aber nicht sicher, ob es wirklich der Weisheit letzter Schluss ist.
Gruss
Tilman
Re: Erste Aktion nach Programmstart
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 ...
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 ...