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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Механизм parent'ов, деструкторов  (Прочитано 10722 раз)
ритт
Гость
« Ответ #15 : Декабрь 19, 2007, 20:30 »

> Поскольку у QMainWindow нет "сигнала удаления"...
QMainWindow не наследуется от QObect??? я в шоке! всегда думал, что наследуется...

а что мешает ставить в конструкторе Qt::WA_DeleteOnClose, а в деструкторе делать клозе() дитёнку для надёжности?
Записан
Cyrax
Гость
« Ответ #16 : Декабрь 19, 2007, 21:10 »

Цитировать
а что мешает ставить в конструкторе Qt::WA_DeleteOnClose, а в деструкторе делать клозе() дитёнку для надёжности?
Я так делал - вываливается runtime error (в режиме run).
В главном окне в конструкторе устанавливаю атрибут Qt::WA_DeleteOnClose. quitOnLastWindowClosed не трогаю. Запускаю приложение с главным окном (дочернее вообще не запускаю) и закрываю главное окно.
При этом вываливается ошибка (приложение остаётся в памяти):
Цитировать
warning: dep constructor
warning: dep destructor
warning: HEAP[dep.exe]:
warning: Invalid Address specified to RtlFreeHeap( 003E0000, 0022FD30 )
Previous frame inner to this frame (corrupt stack?)

При закрытии окна оно удаляется, согласно атрибуту Qt::WA_DeleteOnClose, удаляет детёнышей. Наверное срабатывает атрибут quitOnLastWindowClosed приложения, установленный по умолчанию, который пытается ещё раз удалить главное окно...
« Последнее редактирование: Декабрь 19, 2007, 21:11 от Cyrax » Записан
ритт
Гость
« Ответ #17 : Декабрь 19, 2007, 21:33 »

считай, что у меня на лице тень смущения, но я все же спрошу:
в конструкторе ставишь дитёнку 0, а в деструкторе проверяешь дитёнка на не 0 перед попыткой закрыть?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #18 : Декабрь 19, 2007, 22:03 »

2 Cyrax: Покажи как создаешь гланое окно. Не в стеке случайно? Если да, то это не удивительно что будет падать при закрытии с флагом Qt::WA_DeleteOnClose Улыбающийся
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Cyrax
Гость
« Ответ #19 : Декабрь 19, 2007, 22:57 »

Блин, в стеке ведь... удаляется дважды...
Это Qt Eclipse integration так проект заделал, я уж забыл про это совсем...

В данном случае идеологически корректным будет создание в стеке или в куче ?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #20 : Декабрь 19, 2007, 23:23 »

Блин, в стеке ведь... удаляется дважды...
Это Qt Eclipse integration так проект заделал, я уж забыл про это совсем...

В данном случае идеологически корректным будет создание в стеке или в куче ?

Если юзаеться Qt::WA_DeleteOnClose, то виджет должен быть создан в куче. Инече будет двойное удаление
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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