Seite 1 von 1
Functionsausführung direkt nach dialog.show()
Verfasst: 16. August 2005 16:23
von horst böhse
Hallo zusammen!!
Ich versuche krampfhaft, in QT eine Möglichkeit zu finden,
dass eine Funktion unmittelbar nach sichtbarwerden des Dialogs
ausgeführt wird.
showEvent z.B wird immer davor ausgeführt und ein passendes SIGNAL hab ich auch nicht gefunden.
Kann mir da jemand helfen?
Schonmal Danke
Verfasst: 16. August 2005 17:06
von RHBaum
If you need to do some delayed initialization use polish().
Steht so in der Hilfe bei der QT unter Show()
und wenn man sich das signal polish genauer anschaut, passt es nahezu perfekt auf deine stellenausschreibung
Ciao ...
Verfasst: 17. August 2005 09:02
von horst böhse
Danke erstmal!
Das Problem an polish() ist: Es wird ausgeführt, bevor der Dialog gezeigt wird!
Ich möchte aber in dieser Funktion Anfangsinitialisierungen vornehmen, deren Status man im Dialogfenster sehen kann.
Das kann ich mit dieser Funktion leider auch nicht machen!
Vielleicht hat ja noch jemand einen anderen Vorschlag.
Danke
Verfasst: 17. August 2005 13:30
von RHBaum
Ok, dann hab ich das falsch verstanden .....
muss das fenster unbedingt modal sein ?
Vielleicht die Paint Methode abfangen ....
Code: Alles auswählen
virtual MyDialog::paintEvent ( QPaintEvent * pEvent )
{
QDialog::paintEvent(pEvent);
if(!binit )
{
OnShow(); // eigene OnShow Aufrufen
binit = true;
}
}
binit natuerlich mit alse initialisieren

funktioniert das ?
Hab das eigentlich noch nie gebraucht ... wenn nen Dialog aufpoppt, sollt man sofort drin rumschreiben koennen ... man braucht die initialization kaum sichtbar ....
Oder es handelt sich um nen Progressdialog, der iss auch ganz anders aufgebaut ....
Ciao ...
Verfasst: 17. August 2005 14:59
von Flachkoepper
Mahlzeit,
also in der Doku steht, dass showEvent() von Top-Level-Widgets NACH dem show() ausgesendet werden. Habe das selbst auch schon erfolgreich benutzt. Müsste doch demnach das richtige für dich sein, oder? (sofern dein Dialog Top-Level ist).
Viele Grüße,
Flachkoepper
Verfasst: 18. August 2005 11:22
von horst böhse
Mit showEvent hab ich das schon probiert, wird bei mir aber auch kurz davor ausgeführt!
Hab es jetzt ganz anders realisiert, indem ich beim Instanzieren meiner Dialogklasse den Parameter Modal auf false gesetzt habe, so dass qt nicht schon beim aufruf von
show() in die Ereignisschleife geht, sonder erst bei
app.exec().
Meine Funktion hab ich dann quasi zwischen die Aufrufe dieser beiden gesteckt, so funzt es.
Ich bedanke mich aber trotzdem für die Beiträge.
Allerdings tritt jetzt ein neues Problem auf.
Mein TextView-Widget wird während der Ausführung dieser Funktion
nicht aktualisiert.
Der Titel meines Dialogs aber schon! Hab zum testen ein paar Sleeps
eingebaut.
update() und
repaint() hat auch nicht geholfen
Code: Alles auswählen
Sleep(1000);
TextView_Status->setText("1");
update();
Sleep(1000);
TextView_Status->setText("2");
update();
Verfasst: 19. August 2005 09:39
von ArneStocker
Hi
sleep() wird da wohl nicht helfen. Du müsstest wohl den eventloop laufen lassen etwa mit qApp->processEvents(100) oder so. Damit gibst Du QT die Gelegenheit, einige events abzuarbeiten. Es gibt über die Klasse QEventloop auch die Möglichkeit, (bestimmte) zwischenzeitliche Benutzereingabe auszuschliessen.
Gruss Arne
PS.: Ein modaler Dialog hat glaube ich einen eigenen Eventloop, allerdings weiss ich nicht wie man an den rankommt. Die o.g. Möglichkeit funktioniert aber, d.h. wenn Du die Benutzereingabe ausschliesst.
Verfasst: 19. August 2005 12:13
von FlorianBecker
Wie wäre es mit einem QTimer singleShot?
Verfasst: 19. August 2005 19:19
von ArneStocker
Wie wäre es mit einem QTimer singleShot?
habe ich noch nicht ausprobiert, hört sich aber so gut an, dass ich's mir auf jeden Fall merken werde
Gruss Arne