QWidget +destruktor
-
Das geht aber auch nicht wenn ich für 0 parent einsetze
Das ist auch meine erste vermutung gewesen.
Wobei die null doch sagt, dass das Obejekt zerstört wird, wenn qApp zerstört wird.
Also müßte es eigentlichbei ß und parent gehen.Gruß
-
Das ist der Basisinitialisierer. Verwenden tust du da nen normalen Konstruktor der Basisklasse. In der Doku steht zum QWidget-Konstruktor
If parent is 0, the new widget becomes a window. If parent is another widget, this widget becomes a child window inside parent. The new widget is deleted when its parent is deleted.
Wenn du also niemals nicht diese Meldungen bekommst machst du etwas falsch.
Und deinen Destruktor-Aufruf in destrukt lass mal bitte lieber.
Statt einem eigenen Experiment nimmst du besser QObject::deleteLater(). Das ist ein SLOT und der funktioniert.Wenn es immer noch nicht geht müssen wir wiessen, wie du deine MainWindow erstellst und vor allem wie es zerstört wird! Ich nehme nämlich einfach mal an, das wird nie zerstört, weil du es in main() auf dem HEAP anlegst und kein delete machst.
-
Puh danke deine Vermutung ist gold richtig gewesen.
habs ejtzt, und dann is das mit dem destroy natürlich schwachsinn.
Gruß und dankeP.s. habe mir Main langenicht mehr angeschaut ^^
-
Destruktoren ruft man nicht direkt auf. Und wenn du new benutzt, solltest du auch delete nutzen.
Ein Smartpointer wäre hier aber besser.
-
Um ehrlich zu sein dachte ich, dass mein QMainWindow zerstört wird, wenn meine QApplication zerstört wird.
Und die is ja nicht dynamisch.
Gruß
-
Das sollte es auch werden. Musst du einfach mal einen Haltepunkt im Destruktor setzen beim debuggen.
Und der Destruktor (der Basisklasse) sollte natürlich virtuell sein.
-
phlox81 schrieb:
Das sollte es auch werden. Musst du einfach mal einen Haltepunkt im Destruktor setzen beim debuggen.
Und der Destruktor (der Basisklasse) sollte natürlich virtuell sein.Nochmal. Du meinst, ein QMainWindow würde automatisch zerstört, wenn das QApplication-Objekt zerstört wird, auch wenn das QMainWindow-Objekt auf dem HEAP liegt?
int main(int argc, char** argv) { QApplication app(argc, argv); MainWindow* mainWindow = new MainWindow; return app.exec(); }
mainWindow wird hier NIE zerstört, ergo auch kein Destruktor-Aufruf.
-
Also soweit ich das sehe macht er das nicht.
int main(int argc,char * argv[]) { QApplication app(argc,argv); CIM_Main_Window *window=new CIM_Main_Window(); window->show(); app.exec(); delete window; return 0; }
Brav meine Destruktoren aufruft, und das:
int main(int argc,char * argv[]) { QApplication app(argc,argv); CIM_Main_Window *window=new CIM_Main_Window(); window->show(); return app.exec(); }
nicht ^^
Gruß
-
^^
Endschuldige l'abra d'or,
erst gerade post von Dir gesehen.
Wobei wiso wird QMainWindow nicht in QAppllication vermerkt, und dann alles was in mein mit new erzeugt wurde zerstört beim return von main.
Das es nicht so sit ist klar geworden. Aber gibt es da gründe dafür welche Du kennst ??
(Kanns mir dann besser merken)
Gruß
-
l'abra d'or schrieb:
phlox81 schrieb:
Das sollte es auch werden. Musst du einfach mal einen Haltepunkt im Destruktor setzen beim debuggen.
Und der Destruktor (der Basisklasse) sollte natürlich virtuell sein.Nochmal. Du meinst, ein QMainWindow würde automatisch zerstört, wenn das QApplication-Objekt zerstört wird, auch wenn das QMainWindow-Objekt auf dem HEAP liegt?
int main(int argc, char** argv) { QApplication app(argc, argv); MainWindow* mainWindow = new MainWindow; return app.exec(); }
mainWindow wird hier NIE zerstört, ergo auch kein Destruktor-Aufruf.
Nee, in dem Fall natürlich nich.
Normalerweise liegt das aber auch nich aufm heap.
http://doc.trolltech.com/4.6/mainwindows-application-main-cpp.htmlphlox