Seite 1 von 1

[gelöst] QTreeView löscht inkludierten QStandardItemModel?

Verfasst: 8. Juli 2015 12:16
von lespaul
Hallo Leute,

eigentlich habe ich mal gelernt, alle von mir mit new / malloc erzeugten Objekte auch selbst mit delete / free freizugeben.

Ich habe ein QTreeView treeView mit dem Designer erstellt. Ergo befindet sich das treeView im

Code: Alles auswählen

namespace Ui
, automatisch von QtCreator.

Dann erzeuge ich in der Methode getTreeModel() ein neues QStandardItemModel Objekt mittels new
und setze dies in mein treeViews Model mit setModel() :

Code: Alles auswählen

QStandardItemModel* model = TreeFileParser::getTreeModel(0);
ui->treeView->setModel(model);
Da ich das, von mir erstellte QStandardItemModel-Heapobjekt, dem TreeView übergeben habe, lösche ich selbst nirgends. :?:
Später wird dann in dem Desktruktor vin meinem Widget

Code: Alles auswählen

  delete ui;
aufgerufen, wo sich ja auch mein treeView befindet. Meine Hoffnung ist, dass das QStandardItemModel dadurch mit bereinigt wird?

Ist das so?

Vielen Dank schonmal und viele Grüße

Re: QTreeView löscht inkludierten QStandardItemModel?

Verfasst: 8. Juli 2015 12:31
von RHBaum
DOkumentation QObject !

Kurz:
du gibst beim erzeugen (hoffentlich) den Parent mit ....
damit bilden deine QObjekte einen Baum (via parent child beziehung)
löschst du ein Object, werden automatisch alle seine kinder gelöscht
den zeitpunkt hasst aber nicht ganz so unter kontrolle ...

bei QObjecten die mit Eventquees arbeiten sollte man Objecte auch nicht mit delete direkt löschen, sondern immer mit deleteLater ...

Für GUI content ist das ne super sache ...
aber vom "Style" her eher nicht so wirklich c++ like.
Fühlt sich eher an wie java als wie c++

Ciao ...

Re: QTreeView löscht inkludierten QStandardItemModel?

Verfasst: 9. Juli 2015 10:12
von lespaul
RHBaum hat geschrieben:du gibst beim erzeugen (hoffentlich) den Parent mit ....
Jupp, wird per this mitgegeben.
RHBaum hat geschrieben:den zeitpunkt hasst aber nicht ganz so unter kontrolle ...
Solange alles korrekt gelöscht wird, wär mir das wurscht. Passiert eh am Ende, wenn applikation Terminiert wird.
RHBaum hat geschrieben:Für GUI content ist das ne super sache ...
aber vom "Style" her eher nicht so wirklich c++ like.
Fühlt sich eher an wie java als wie c++
Was ist für GUI s ne super Sache? Treeviews?

Re: [gelöst] QTreeView löscht inkludierten QStandardItemMode

Verfasst: 27. Juli 2015 14:44
von RHBaum
Was ist für GUI s ne super Sache? Treeviews?
Nein, Ich meinte für GUI's generell, also alles was mit darstellung und usereingabe zu tun hat, sind die selbstzerstörungsmechanismen (java like) ne Super sache.
Für anwendungslogik, oftmals mit Multithreading, ist das verhalten oft kritisch zu sehen (performance,locking ... )
Trifft für alle QObject's zu, iss also kein Unterschied für diese Thematik, ob die nen ItemModel verwendest, oder nen Treeview per Hand befeuerst (QTreeviev ist auch von AbstractItemView abgeleitet, also baut der im Hintergrund wahrscheinlich eh auch nen privates Model, was einfach nur befüllst)

Du wirst auch kaum GUI's finden, die ohne sowas auskommen. Es gab/gibt paar Ansätze, die haben sich aber ned durchgesetzt.
Bei GUI's ists einfach pracktisch, weil GUI's generell hirarisch aufgebaut sind (windows hirarchie) und multithreading oft keine ROlle spielt, bzw gar ned geht (MainGUIThread zwang)

Also mach dir kein Kopp ... klemm alle deine Objecte in die QObject Hirarchie, und verlass dich drauf, das die gelöscht werden wenn nen übergeordnetes Object/fenster gelöscht wird.
Würde das nicht funktionieren, hätte Qt auch nen echtes Problem ^^

Ciao ...