Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 17, 2008 23:09:25

The gray Cardinal
От:
Зарегистрирован: 2007-03-07
Сообщения: 422
Репутация: +  0  -
Профиль   Отправить e-mail  

pyQT4, разрушение QDialog

Создаю окошко своего класса, который является наследником QDialog. Вызываю окно методом exec_() в коде родительского окна, а закрываю его методом self.done() в коде самого класса диалога. После этого вызываю в коде родительского окна метод диалога destroy().

Мне показалось странным, что после вызова destroy() в коде родительского окна оказываются доступными виджеты объекта диалога (уже якобы разрушенного) и их содержимое. Так и должно быть? Что же тогда делает destroy(), и надо ли его вообще вызывать?



Офлайн

#2 Ноя. 18, 2008 01:33:31

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

pyQT4, разрушение QDialog

.deleteLater() лучше юзать, при этом все сигналы отсоединяются, те кому надо “проинформированы” и происходит удаление “как надо” без каких-либо конфликтов. Вызывать можно для классов, у которых есть парент. Обычно парент заботится об удалении своих чилдренов (вызывается тот же deleteLater для каждого из них).



Отредактировано (Ноя. 18, 2008 01:46:23)

Офлайн

#3 Ноя. 18, 2008 11:30:57

The gray Cardinal
От:
Зарегистрирован: 2007-03-07
Сообщения: 422
Репутация: +  0  -
Профиль   Отправить e-mail  

pyQT4, разрушение QDialog

Всё же я не понял, чем deleteLater() лучше destroy(). Кстати, непосредственно после вызова deleteLater() виджеты объекта диалога и их содержимое тоже доступны. В справке вроде написано, что deleteLater() разрушает окно после того, как завершён цикл обработки его событий (mainloop). Метод диалога done() завершает этот цикл? Вот мой пример:
http://forum.script-coding.info/viewtopic.php?id=2466



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version