crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
> Родитель виджета, не удаляющий дитёнка
Алексей1153
  опции профиля:
сообщение 12.11.2010, 14:15
Сообщение #1


фрилансер
******

Группа: Участник
Сообщений: 2814
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 191 раз(а)




Репутация:   34  


В общем то, иногда напрягает эта самодеятельность - что родительский виджет мочит чайлдов, когда сам разрушается. Это можно как-то запретить делать ? Но само родительство должно оставаться в силе
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.11.2010, 15:23
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9634
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 769 раз(а)




Репутация:   94  


Цитата(Алексей1153 @ 12.11.2010, 17:15) *
Это можно как-то запретить делать ?
нет. а где может понадобится оставлять сирот?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 12.11.2010, 15:56
Сообщение #3


фрилансер
******

Группа: Участник
Сообщений: 2814
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 191 раз(а)




Репутация:   34  


Litkevich Yuriy, много где может. Например: имеется список виджетов. Создаю временного родителя, связываю, показываю их там (или в другом порядке - сначала создан родитель, потом заполнен список)

А потом мне родитель не нужен, а дети должны остаться. Я мочу родителя, а он мочит детей - некузяво.

разве что попробовать при разрушении родителя отсоединить всех детей

Сообщение отредактировал Алексей1153 - 12.11.2010, 15:59
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.11.2010, 16:03
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9634
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 769 раз(а)




Репутация:   94  


Цитата(Алексей1153 @ 12.11.2010, 18:56) *
А потом мне родитель не нужен, а дети должны остаться.
установи всем детям "0" в качестве родителя
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
panter_dsd
  опции профиля:
сообщение 12.11.2010, 16:29
Сообщение #5


Жаждущий знаний
***

Группа: Участник
Сообщений: 254
Регистрация: 1.1.2009
Из: Санкт-Петербург
Пользователь №: 474

Спасибо сказали: 32 раз(а)




Репутация:   3  


Можно пробовать по сигналу void QObject::destroyed ( QObject * obj = 0 ) [signal] родителя забирать у него детей.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.11.2010, 17:17
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9634
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 769 раз(а)




Репутация:   94  


Цитата(Алексей1153 @ 12.11.2010, 18:56) *
имеется список виджетов. Создаю временного родителя, связываю, показываю их там
...
А потом мне родитель не нужен, а дети должны остаться.
вообще здесь нужен "управлятор" этим процессом, который и будет следить за объектами и их связями

Имеет смысл полистать и освежить в памяти шаблоны проектирования.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 12.11.2010, 18:38
Сообщение #7


фрилансер
******

Группа: Участник
Сообщений: 2814
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 191 раз(а)




Репутация:   34  


Цитата(Litkevich Yuriy @ 12.11.2010, 18:03) *
установи всем детям "0" в качестве родителя

нее, они тогда не смогут быть его кнопками/окошками :)

Цитата(panter_dsd @ 12.11.2010, 18:29) *
Можно пробовать по сигналу void QObject::destroyed ( QObject * obj = 0 ) [signal] родителя забирать у него детей.

вот это более на правду похоже, попробую завтра

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 12.11.2010, 18:47
Сообщение #8


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 108 раз(а)




Репутация:   23  


Цитата(Алексей1153 @ 12.11.2010, 18:38) *
они тогда не смогут быть его кнопками/окошками :)

кого его?
ты в следующей строчке его удалишь.
что то типа:
void killWidgetWithoutChildren(QWidget* wgt)
{
foreach(wgt->children(), QObject* obj) if(obj->isWidget()) obj->reparent(NULL);
delete wgt;
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 12.11.2010, 19:06
Сообщение #9


фрилансер
******

Группа: Участник
Сообщений: 2814
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 191 раз(а)




Репутация:   34  


Цитата(kwisp @ 12.11.2010, 20:47) *
кого его?

это я не так предложение прочитал. Юрий предлагает обнулить родителя у детей перед удалением родителя (я так и решил сделать). А я сначала почему-то решил, что он предлагает изначально не задавать родителя :D

---------------
А вот , вроде, и таблетка:
Цитата
void QWidget::destroy ( bool destroyWindow = true, bool destroySubWindows = true ) [protected]
Frees up window system resources. Destroys the widget window if destroyWindow is true.

destroy() calls itself recursively for all the child widgets, passing destroySubWindows for the destroyWindow parameter. To have more control over destruction of subwidgets, destroy subwidgets selectively first.

This function is usually called from the QWidget destructor.



то есть, в деструкторе просто вызвать

destroy ( true, false );

и всё :) Щас проверю

Сообщение отредактировал Алексей1153 - 12.11.2010, 19:39
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 12.11.2010, 19:20
Сообщение #10


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 108 раз(а)




Репутация:   23  


Цитата(Алексей1153 @ 12.11.2010, 19:06) *
А вот , вроре, и таблетка:

ну да это больше на ООП похоже. хотя в нутрях предполагаю тоже происходит что и в приведенной мной функции
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V   1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.2.2018, 9:42