2010-10-26 4 views
9

Привет всем, У меня есть небольшое сомнение относительно управления памятью Qt,Управление памятью в Qt

Давайте рассмотрим пример Listview, в ListView мы добавляем каждый элемент выделения памяти динамически. Так что в этом случае мы должны удалить все «новые» предметы ред вручную ..

Например:

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); 
} 

В этом примере элемент должен быть удален вручную?

+0

Один верный способ узнать - посмотрите на код. – shoosh

+0

hmmm, его утомительный JOb :) – Naruto

+1

В документах Qt часто указывается, принадлежит ли какой-либо предмет собственности к переданному объекту, или нет. В случае QStandardItemModel он не упоминается везде (например, для setItem(), но не для appendRow()) –

ответ

15

QStandardItemModel получает право собственности на предметы, поэтому они будут автоматически удалены при уничтожении модели. Вам все равно нужно удалить сама модель (setModel() не передает права собственности модели на представление, потому что одна модель может использоваться несколькими видами).

Смежные вопросы