Изучаю вопрос о грамотном управлении памятью. Как я понял, вызывать метод delete() для каждого виджета необязательно, достаточно при его создании объявить ему parent и при удалении родителя будут удалены и все его дочерние виджеты.
Теперь, есть окно QMdiSubWindow. Код создания окна:
CatProducts *catProducts = new CatProducts();
catProducts->setObjectName("catProducts");
mdiArea->addSubWindow(catProducts);
catProducts->show();
Окну присвоен атрибут Qt::WA_DeleteOnClose. На это окно я вешаю QWidget как internal widget, а на него уже остальные виджеты. Код примерно такой:
QWidget *internalWidget = new QWidget(this);
setWidget(internalWidget);
QGridLayout *layout = new QGridLayout(internalWidget);
internalWidget->setLayout(layout);
QTreeView *tree = new QTreeView;
tree->setFixedWidth(100);
layout->addWidget(tree,1, 1, 1, 3);
QPushButton *button = new QPushButton("BUTTON");
layout->addWidget(button, 2, 1);
Теперь диспетчером задач в винде тестирую расход памяти открывая/закрывая моё QMdiSubWindow. При открытии объём потреблённой памяти увеличивается, а при закрытии не уменьшается. Т.е. занятая память не высвобождается. Как это нужно делать правильно?
И ещё вопрос: на примере layout'а, передача его в качестве параметра конструктора QTreeView *tree = new QTreeView(layout) и запись layout->addWidget(tree) идентичны? Т.е. в обоих случаях layout является родительским виджетом для tree?
Продвижение своими сайтами как стратегия роста и независимости