2010-10-26 7 views
9

Salut à tous, je ont petit doute sur la gestion de la mémoire Qt,Gestion de la mémoire dans Qt

Prenons un exemple de Listview, en listview nous ajoutons chaque élément en allouant dynamiquement la mémoire. Donc, dans ce cas, nous ne devons supprimer tous les « nouveaux » éléments ées manuellement ..

Par exemple:

Qlistview *list = new Qlistview; 
QStandardItemModel *mModel = new QStandardItemModel(); 
list ->setModel(mModel); 

for(int I =0;i<10;i++) 
{ 
QsandardItem *item = new QsandardItem(“Hi”); 
mModel->appendRow(item); 
} 

Dans cet exemple, l'article doit être supprimé manuellement?

+0

Un moyen sûr de trouver - regardez le code. – shoosh

+0

hmmm, son JOb fastidieux :) – Naruto

+1

Les documents Qt indiquent souvent si un objet prend possession d'un objet transmis ou non. Dans le cas de QStandardItemModel, il n'est pas mentionné partout (c'est par exemple pour setItem(), mais pas pour appendRow()) –

Répondre

15

QStandardItemModel prend possession des éléments, ils seront donc automatiquement supprimés lorsque le modèle est détruit. Vous devez toujours supprimer le modèle lui-même (setModel() ne transfère pas la propriété du modèle à la vue, car un modèle peut être utilisé par plusieurs vues).