paoleela hat geschrieben:Somit ist der Timer statisch aber erstmal ok?
ja.
paoleela hat geschrieben:Warum das einen Absturz gibt, versteh ich dennoch nicht ganz. Der Parent des QLayout ist das Fenster. Wird das Fenster zerstört, wird das QLayout zerstört, und das zerstört wieder rum das child QButton.
Dass alle QObject-Erben sind, hat doch keinen Einfluß, oder?
Doch - wird ein QObject zerstört, zerstört es automatisch alle seine Kinder! Nehmen wir mal folgendes an:
Code: Alles auswählen
Class Test:public QWidget
{
QPushButton my_button;
}
...
Test::Test()
{
addWidget(&my_button);
}
...
int main()
{
Test my_test;
}
Folgendes passiert nun bei der Destruktion:
- das my_test zugrundeliegende QObject zerstört zunächst automatisch my_button, da my_button per addWidget() dort eingehängt wurde.
- anschließend gibt der Destruktor ~Test() den gesamten Speicherbereich der Instanz frei, inkl. dem Bereich, den my_test belegt hatte - obwohl my_test bereits tot ist!
Ich hoffe, das ist jetzt einigermaßen verständlich gewesen.
Sinn der Sache ist, dass man sich nicht mehr ums Aufräumen der kind-Objekte kümmern muss - was man wirklich schätzen lernt, wenn die Oberfläche dynamisch aufgebaut wird. An diesem Punkt scheinen übrigens regelmäßig Leute hängen zu bleiben, manche beschweren sich sogar heftigst, weil sie den Sinn nicht verstehen, und zwar nicht nur in diesem Forum (schaut mal z.B.
hier, da ist das Verhalten auch nochmal beschrieben, insb. auch der englische Text!)