On Dienstag, 18. März 2003 15:11, Holger Macht wrote:
Habe ich gemacht und ich habe in der Tat ein Reihenfolgeproblem.
Dachte ich's mir doch.
Am Montag, 17. März 2003 18:46 schrieb Stefan Hundhammer:
P.S.: Wenn Du ein Reihenfolgeproblem hast, hilft oft QTimer::singleShot() weiter - Du schreibst dann den Teil, der später drankommen muß, in einen eigenen Slot, der dann aufgerufen wird, sobald Qt in die Hauptschleife kommt (QAPPlication::exec()) - dann ist üblicherweise alles initialisiert.
Falls ich das, was später ausgeführt werden soll in einen extra Slot schreibe, funktioniert es auch ohne QTimer.
Äh - na ja, die Idee ist, daß ein Teil der Initialisierung dieses Unterwidgets später ausgeführt wird - eben in einem solchen zusätzlichen Slot. Wenn Du ganz ohne diese Initialisierung auskommst, umso besser.
Kann es sein, dass immer nur der erste Slot ausgeführt wird Slots in diesem Slot nicht mehr?
Verstehe ich nicht ganz, aber tendenziell würde ich sagen "nein". ;-) Du kannst ein Signal mit beliebig vielen Slots verbinden - die werden garantiert alle ausgeführt. Die Reihenfolge der Ausführung ist allerdings undefiniert.
Das ist nämlich bei mir so. Der zeite Slot kommt erst dran, wenn ich darauf zugreife --> also funktioniert es.
???
Habe aber trotzdem noch eine kleine Frage zu QTimer: WIe prüfe ich denn, wann a.exec() ausgeführt wird?
Gar nicht. Du rufst es in main() auf, mehr muß niemanden interessieren.
Es siehgt ja so z. B. aus:
QTimer::singleShot( 1000, &a, SLOT(quit()) );
Anstelle der Zeit (1000) brauche ich doch ein Signal, oder?
Nein. Als Zeit nimmst Du einfach 0, dann wird nach 0 ms der Slot ausgeführt - also bei nächster Gelegenheit, wenn eben app.exec() ausgeführt wird. Was Du dabei gewinnst, ist die Garantie, daß Du zu diesem Zeitpunkt garantiert in der Hauptereignisschleife bist - etwas anderes ist ja app.exec() nicht.
Application::exec() ist aber ja keines. Wie realisiere ich das dann?
Schau' Dir doch mal die Beispiele bei QTimer an, dann wird es glaube ich
deutlicher.
CU
--
Stefan Hundhammer