Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: karonator от Октябрь 10, 2010, 20:52



Название: Правильное удаление виджета
Отправлено: karonator от Октябрь 10, 2010, 20:52
Всем доброго времени суток.
У меня вот такой вопрос.
Есть у меня QScrollArea.
Я добавляю виджет на неё.
Ну например так:

Код:
QScrollArea * A;
QWidget * B;

B = new QWidget (A);
Ну и скажем есть некий Layout.

Код:
QHBoxLayout * C;

C-> addWidget (A);

Задача такая: какие действия надо выполнить, чтобы правильно удалить виджет и Layout, оставив QScrollArea в таком состоянии, в каком оно было до добавления виджета?
Про Layout я вроде нашёл removeItem, но как грамотно удалить виджет, не понял.
Помогите пожалуйста.


Название: Re: Правильное удаление виджета
Отправлено: kibsoft от Октябрь 10, 2010, 21:38
delete B;


Название: Re: Правильное удаление виджета
Отправлено: karonator от Октябрь 10, 2010, 22:11
Вы уверены?
Просто я делаю вот так и получаю segmantation folt
Код:
	  QObjectList childs = ui->scrollArea->children();

  for (int i=0; i<childs.size(); i++)
  {
  delete childs[i];
  }


Название: Re: Правильное удаление виджета
Отправлено: Alp от Октябрь 11, 2010, 08:42
Так происходит потому, что при удалении scrollArea она, как QObject, удаляет всех своих детей. А у тебя в списке её детей уже невалидные указатели (поскольку ты предварительно пробежался по списку и убил их всех).

В подобном случае, когда известно, что у виджетов есть общий владелец-родитель необходимо удалять только его. Всех своих детей он удалит сам без твоей помощи.


Название: Re: Правильное удаление виджета
Отправлено: GreatSnake от Октябрь 11, 2010, 09:03
Цитировать
Просто я делаю вот так и получаю segmantation folt
Таким удалением вы ещё убиваете как минимум и скроллбары.


Название: Re: Правильное удаление виджета
Отправлено: trot от Октябрь 12, 2010, 20:54
А может сначала сделать removeWidget(В), а потом вызвать delete