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

Verschiedenes zu Qt
Antworten
lespaul
Beiträge: 87
Registriert: 11. August 2011 10:07

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

Beitrag 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
Zuletzt geändert von lespaul am 10. Juli 2015 15:11, insgesamt 1-mal geändert.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: QTreeView löscht inkludierten QStandardItemModel?

Beitrag 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 ...
lespaul
Beiträge: 87
Registriert: 11. August 2011 10:07

Re: QTreeView löscht inkludierten QStandardItemModel?

Beitrag 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?
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

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

Beitrag 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 ...
Antworten