Nach dem schließen eines Fensters eine Funktion ausführen
Nach dem schließen eines Fensters eine Funktion ausführen
Hallo,
ist es umsetzbar, dass nach dem beenden eines Fensters im "Eltern-Fenster" eine Funktion ausgeführt wird ? Wenn ja wie ?
gruß nexus
ist es umsetzbar, dass nach dem beenden eines Fensters im "Eltern-Fenster" eine Funktion ausgeführt wird ? Wenn ja wie ?
gruß nexus
Du musst deinem Child-Widget ein neues Signal hinzufügen; dann musst du dafür sorgen dass das Signal zur rechten Zeit gesendet wird, also überschreibst du das closeEvent!
Als letztes verbindest du noch das Signal in deinem Parent-Widget per connect.
child.h
child.cpp
parent.cpp
Als letztes verbindest du noch das Signal in deinem Parent-Widget per connect.
child.h
Code: Alles auswählen
(...)
signals:
void closed();Code: Alles auswählen
(...)
void Child::closeEvent(QCloseEvent *event)
{
emit closed();
event->accept();
}Code: Alles auswählen
(...)
Child *child = new Child();
connect(child, SIGNAL(closed()), this, runFunction());Wieso meinen manche Leute eigentlich, das man vor Frage- und Ausrufezeichen ein Leerzeichen machen muss? Macht man vor Punkte und Kommas doch auch nicht. Ich hatte mal wieder ein einsames, verlassenes Fragezeichen in einer Zeile.
Zu deiner Frage, klar geht das. Man kann z.B. das closeEvent überschreiben und ein Signal an das Parentwidget schicken. Bei einer MDI-Anwendung sollte man aber QWorkSpace benutzen. Siehe Doku.
Zu deiner Frage, klar geht das. Man kann z.B. das closeEvent überschreiben und ein Signal an das Parentwidget schicken. Bei einer MDI-Anwendung sollte man aber QWorkSpace benutzen. Siehe Doku.
Oder dieses Signal verwenden:
Code: Alles auswählen
void QObject::destroyed ( QObject * obj = 0 )
Ich würde sagen, dass das den selben Hintergrund hat weshalb du hinter einem Komma ein Leerzeichen setzt. Wegen der besseren Lesbarkeitmacman hat geschrieben:Wieso meinen manche Leute eigentlich, das man vor Frage- und Ausrufezeichen ein Leerzeichen machen muss ? Macht man vor Punkte und Kommas doch auch nicht. Ich hatte mal wieder ein einsames, verlassenes Fragezeichen in einer Zeile.
"Schau doch in's Wiki !" ist doch besser als "Schau doch in's Wiki!"
Und danke für eure schnellen Antorten
Das ist nicht besser, das ist grausam. Und es dient ganz bestimmt nicht der besseren Lesbarkeit, sonst hätte man es nicht in der DIN 5008 festlegen müssen. In Zeiten der automatischen Zeilenumbrüche ich Plenken evilnexus hat geschrieben:"Schau doch in's Wiki !" ist doch besser als "Schau doch in's Wiki!"
http://de.wikipedia.org/wiki/Plenk
Hallo zusammen,
ich beziehe mich auf den ersten Post von upsala
myDialog.cpp
Jetzt wird doch das Signal destroyed gesendet, welches ich im MainWindow folgendermaßen verarbeiten möchte:
MainWindow.cpp
Doch debugger bringt folgende Fehlermeldung:
C:/Qt/SBOX/SBOX/mainwindow.cpp:97: error: invalid use of void expression
und verweist auf die connect(...) Zeile.
Was ist da falsch? Wie ist es richtig? Vermute ich fange/rufe das Signal destroyed() flasch ab/auf. Muss ich da noch was übergeben?
Doku sagt ja:
LG TK
ich beziehe mich auf den ersten Post von upsala
Ich erzeuge aus einem MainWindow einen Dialog und setzte dessen Attribut wie folgt:Oder dieses Signal verwenden:
Code:
void QObject::destroyed ( QObject * obj = 0 )
myDialog.cpp
Code: Alles auswählen
setAttribute(Qt::WA_DeleteOnClose);MainWindow.cpp
Code: Alles auswählen
...
connect(auswahlDialog, SIGNAL(destroyed()), this, test());
}
void MainWindow::test(void)
{
;
}C:/Qt/SBOX/SBOX/mainwindow.cpp:97: error: invalid use of void expression
und verweist auf die connect(...) Zeile.
Was ist da falsch? Wie ist es richtig? Vermute ich fange/rufe das Signal destroyed() flasch ab/auf. Muss ich da noch was übergeben?
Doku sagt ja:
Aber das verstehe ich nicht ganz. Muss ich destroyed() myDialog übergeben? Danke für Antwortenvoid QObject::destroyed ( QObject * obj = 0 ) [signal]
This signal is emitted immediately before the object obj is destroyed, and can not be blocked.
All the objects's children are destroyed immediately after this signal is emitted.
LG TK