Russian Qt Forum
Ноябрь 25, 2024, 03:14 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Правильное удаление виджета  (Прочитано 4953 раз)
karonator
Гость
« : Октябрь 10, 2010, 20:52 »

Всем доброго времени суток.
У меня вот такой вопрос.
Есть у меня QScrollArea.
Я добавляю виджет на неё.
Ну например так:

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

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

Код:
QHBoxLayout * C;

C-> addWidget (A);

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

Сообщений: 625


Просмотр профиля WWW
« Ответ #1 : Октябрь 10, 2010, 21:38 »

delete B;
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
karonator
Гость
« Ответ #2 : Октябрь 10, 2010, 22:11 »

Вы уверены?
Просто я делаю вот так и получаю segmantation folt
Код:
	  QObjectList childs = ui->scrollArea->children();

  for (int i=0; i<childs.size(); i++)
  {
  delete childs[i];
  }
Записан
Alp
Гость
« Ответ #3 : Октябрь 11, 2010, 08:42 »

Так происходит потому, что при удалении scrollArea она, как QObject, удаляет всех своих детей. А у тебя в списке её детей уже невалидные указатели (поскольку ты предварительно пробежался по списку и убил их всех).

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

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Октябрь 11, 2010, 09:03 »

Цитировать
Просто я делаю вот так и получаю segmantation folt
Таким удалением вы ещё убиваете как минимум и скроллбары.
Записан

Qt 5.11/4.8.7 (X11/Win)
trot
Гость
« Ответ #5 : Октябрь 12, 2010, 20:54 »

А может сначала сделать removeWidget(В), а потом вызвать delete
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 22.