The gray Cardinal
Ноя. 17, 2008 23:09:25
Создаю окошко своего класса, который является наследником QDialog. Вызываю окно методом exec_() в коде родительского окна, а закрываю его методом self.done() в коде самого класса диалога. После этого вызываю в коде родительского окна метод диалога destroy().
Мне показалось странным, что после вызова destroy() в коде родительского окна оказываются доступными виджеты объекта диалога (уже якобы разрушенного) и их содержимое. Так и должно быть? Что же тогда делает destroy(), и надо ли его вообще вызывать?
poltergeist
Ноя. 18, 2008 01:33:31
.deleteLater() лучше юзать, при этом все сигналы отсоединяются, те кому надо “проинформированы” и происходит удаление “как надо” без каких-либо конфликтов. Вызывать можно для классов, у которых есть парент. Обычно парент заботится об удалении своих чилдренов (вызывается тот же deleteLater для каждого из них).
The gray Cardinal
Ноя. 18, 2008 11:30:57
Всё же я не понял, чем deleteLater() лучше destroy(). Кстати, непосредственно после вызова deleteLater() виджеты объекта диалога и их содержимое тоже доступны. В справке вроде написано, что deleteLater() разрушает окно после того, как завершён цикл обработки его событий (mainloop). Метод диалога done() завершает этот цикл? Вот мой пример:
http://forum.script-coding.info/viewtopic.php?id=2466