Qt ma na pewno interesujący model obiektu. Kiedy zaczynałem, niepokoiło mnie, że było tak wiele połączeń new Foo
i nie było ich.
http://qt.nokia.com/doc/4.6/object.html Jest dobrym miejscem do rozpoczęcia czytania na modelu obiektowym.
Ciekawostki: Podklasy QObject mają przypisane swoje metody i metody copy-ctor wyłączone. Łańcuch obiektów child-parents jest utrzymywany wewnętrznie przez QObject.
Generalnie podczas tworzenia podklasy QObject (jeśli nie planujesz samodzielnie zarządzać wskaźnikiem), wskażesz inny wskaźnik QObject jako obiekt nadrzędny. Ten "rodzic" następnie przejmuje zarządzanie dzieckiem, które właśnie zrobiłeś. Możesz wywołać metodę setParent() na obiekcie QObject, aby zmienić, kto jest jego właścicielem. W Qt istnieje bardzo niewiele metod, które zmieniają obiekt macierzysty obiektu i wszystkie wyraźnie stwierdzają, że robią to w dokumentach.
Aby odpowiedzieć na konkretne pytanie: zależy to od sposobu utworzenia wszystkich instancji MyWidget.
Jeśli zrobiłeś je z rodzicem, to nie, nie musisz ich usuwać. Rodzic usunie je po usunięciu.
Jeśli przechowujesz ich kolekcję QList<MyWidget*>
, a nie dałeś im rodzica, powinieneś je usunąć samodzielnie.
Nie można ustawić kolekcji Qt jako elementu nadrzędnego obiektu. Obiekty, które są przydzielane dynamicznie i mają relacje rodzic-dziecko, są obiektami obiektu QObject i pobierają podklasy QObjects/QWidgets jako obiekty nadrzędne. QList i inne klasy kolekcji nie dziedziczą z QWidget (i przez rozszerzenie QObject), więc nie można ustawić go jako rodzica. – blwy10