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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Удаление объекта  (Прочитано 4457 раз)
SibBear
Гость
« : Январь 03, 2014, 07:21 »

Здравствуйте. Вопрос новичка. Есть класс, основанный на QDialog, объект которого создается по нажатию меню:

Код:
void MainWindow::show_report()
{
    (...)
    Report* report=new Report(this);
    report->show();
}

Удалится ли этот объект после закрытия, и что нужно сделать, чтобы он удалился? Нужно ли создавать, например, вектор с указателями для последующего их удаления? Можно ли в деструкторе указать deleteLater()?

Спасибо.
« Последнее редактирование: Январь 03, 2014, 08:34 от SibBear » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Январь 03, 2014, 11:29 »

Проще всего установить флажок WA_DeleteOnClose
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #2 : Январь 03, 2014, 11:47 »

Только сейчас задумался: а что происходит с виджетом, у которого нет флага WA_DeleteOnClose и которого закрыли ( close(); )?
Он просто прячется( setVisible( false ); )?
Записан

Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Январь 03, 2014, 12:00 »

Только сейчас задумался: а что происходит с виджетом, у которого нет флага WA_DeleteOnClose и которого закрыли ( close(); )?
Он просто прячется( setVisible( false ); )?
Да, он просто скрывается. Уничтожение произойдет, когда будет уничтожаться родитель (если он есть) или никогда.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #4 : Январь 03, 2014, 12:05 »

Ясно Улыбающийся
Записан

Serr500
Гость
« Ответ #5 : Январь 03, 2014, 13:10 »

Удалится ли этот объект после закрытия?
Нет. Он удалится только когда удалится его родитель.

что нужно сделать, чтобы он удалился?
Либо дать ему флаг WA_DeleteOnClose, либо вызвать где-нибудь внутри метод deleteLater().

Можно ли в деструкторе указать deleteLater()?
Нельзя. Деструктор вызывается уже в процессе разрушения объекта.
Записан
SibBear
Гость
« Ответ #6 : Январь 03, 2014, 13:59 »

Ясно. Спасибо!
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #7 : Январь 03, 2014, 14:32 »

Зачем его вообще создавать динамически? Создавай в стеке и он удалится сам после выхода из метода
Записан
SibBear
Гость
« Ответ #8 : Январь 03, 2014, 15:23 »

Зачем его вообще создавать динамически? Создавай в стеке и он удалится сам после выхода из метода
Потому что нужна возможность запускать несколько экземпляров.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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