Russian Qt Forum
Июнь 16, 2024, 01:15 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: проблемы с удалением немодальных окон  (Прочитано 19483 раз)
fanat9
Гость
« Ответ #15 : Ноябрь 28, 2007, 22:01 »

И за исключением когда закрывается последнее окно и возможно ещё в нескольких ситуациях. Я собственно и имел это ввиду - просто не понравилась фраза:  "закрытие окна не означает его удаление" - иногда означает.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #16 : Ноябрь 28, 2007, 22:22 »

И за исключением когда закрывается последнее окно...

Снова заблуждение! Для простоты возмем одно единственное окно. Если окно создано динамически, и аттрибут Qt::WA_DeleteOnClose отсутствует то после его закрытия программа завершается, но сам объект не удаляеться!
Полное освобождение ресурсов происходит когда окно создано в стеке или удалено явно после завершения приложения.

...и возможно ещё в нескольких ситуациях

В каких ситуациях? Поделитесь информацией с остальными, не жадничайте Подмигивающий
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
fanat9
Гость
« Ответ #17 : Ноябрь 28, 2007, 22:35 »

Цитировать
Снова заблуждение! Для простоты возмем одно единственное окно. Если окно создано динамически, и аттрибут Qt::WA_DeleteOnClose отсутствует то после его закрытия программа завершается, но сам объект не удаляеться!
Полное освобождение ресурсов происходит когда окно создано в стеке или удалено явно после завершения приложения.

А если нет ? И пример такой можно чтобы мне разобраться до конца ?

Цитировать
В каких ситуациях? Поделитесь информацией с остальными, не жадничайте
А например когда closeEvent() переопределен, вот  Смеющийся
« Последнее редактирование: Ноябрь 28, 2007, 22:37 от fanat9 » Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #18 : Ноябрь 28, 2007, 22:48 »

А если нет ? И пример такой можно чтобы мне разобраться до конца ?

Помоему вы сами можете написать этот пример, или нет?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Dodge
Гость
« Ответ #19 : Ноябрь 28, 2007, 22:58 »

Помоему вы сами можете написать этот пример, или нет?
Просто человек не знает о чем говорит.

На самом деле есть некоторые проблемы с автоматическим удалением окон(если угодно объектов QWidget и их наследников), если не использовать Qt::WA_DeleteOnClose.

Я в свое время прибывал в некотором недоумении, когда например deleteLater() в переопределенном методе closeEvent виджета, приводило к падению программы. Версию qt точно не скажу, но возможно даже в 4.3.0.
Есть некоторые моменты при работе с виждетами, которые я не понимаю или не знаю. Обычно в таких ситуациях я не разбираюсь в чем проблема, а нахожу альтернативный способ ее решить, ибо времени жалко.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #20 : Ноябрь 28, 2007, 23:02 »

Просто человек не знает о чем говорит.

2 Dodge: А кому адресован этот пост, мне или fanat9?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Dodge
Гость
« Ответ #21 : Ноябрь 28, 2007, 23:04 »

2 Dodge: А кому адресован этот пост, мне или fanat9?
fanat9 естесно...
Записан
Lion
Гость
« Ответ #22 : Ноябрь 29, 2007, 07:50 »

Если QMainWindow отображается в виде отдельного окна, то у него parent() == NULL, иначе это окно обображалось бы внутри BaseForm.

Серьёзно?
Как правило да, но выяснилось что это не отностится к QDialog и QMainWiondow.
Записан
ритт
Гость
« Ответ #23 : Ноябрь 29, 2007, 09:00 »

хм...интересно какое это правило? когда мэйнвиндов создаётся из главной функции и ни одного виджета ещё не существует, чтобы поставить его родителем окну?
охренеть, правило...скорее уж, нужда.
Записан
antipart
Гость
« Ответ #24 : Ноябрь 29, 2007, 20:20 »

Цитировать
Снова заблуждение! Для простоты возмем одно единственное окно. Если окно создано динамически, и аттрибут Qt::WA_DeleteOnClose отсутствует то после его закрытия программа завершается, но сам объект не удаляеться!
так этот атрибут (Qt::WA_DeleteOnClose) нужно для каждого динамического окна указывать?

пробовал указывать только для главного окна и мне не очень понравился результат...-все окна закрываются (вроде как положено) , но приложение висит в задачах...
в моем случае (окон не много) получилось нормально выйти только при помощи delete потомка при закрытии предка...
Записан
Вячеслав
Гость
« Ответ #25 : Ноябрь 29, 2007, 20:40 »

Цитировать
Снова заблуждение! Для простоты возмем одно единственное окно. Если окно создано динамически, и аттрибут Qt::WA_DeleteOnClose отсутствует то после его закрытия программа завершается, но сам объект не удаляеться!
так этот атрибут (Qt::WA_DeleteOnClose) нужно для каждого динамического окна указывать?

пробовал указывать только для главного окна и мне не очень понравился результат...-все окна закрываются (вроде как положено) , но приложение висит в задачах...
в моем случае (окон не много) получилось нормально выйти только при помощи delete потомка при закрытии предка...
Чего-то меня стали сомнения терзать - ты случаем quitOnLastWindowClosed у QApplication'a не трогал ? Сигнал lastWindowClosed () ловиться ? Всетаки IMHO ты чего-то с родителями намудрил - у меня в SDI варианте проги создаеться туева хуча окон - а опосля нормально убиваются  с завершением приложения .....
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #26 : Ноябрь 29, 2007, 20:45 »

так этот атрибут (Qt::WA_DeleteOnClose) нужно для каждого динамического окна указывать?

пробовал указывать только для главного окна и мне не очень понравился результат...-все окна закрываются (вроде как положено) , но приложение висит в задачах...
в моем случае (окон не много) получилось нормально выйти только при помощи delete потомка при закрытии предка...

Нет, не для каждого. Я говрил про главное окно приложения. Когда оно создаеться динамически (при этом парента нет) окно не удаляеться. Qt::WA_DeleteOnClose решает эту проблему.

В вашем случае создаеться второе главное окно. Его нужно удалять или явно или задавать аттрибут Qt::WA_DeleteOnClose и вызывать close()
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #27 : Ноябрь 29, 2007, 20:49 »

Чего-то меня стали сомнения терзать - ты случаем quitOnLastWindowClosed у QApplication'a не трогал ? Сигнал lastWindowClosed () ловиться ? Всетаки IMHO ты чего-то с родителями намудрил - у меня в SDI варианте проги создаеться туева хуча окон - а опосля нормально убиваются  с завершением приложения .....

Все верное. Для каждого окна задан аттрибут Qt::WA_DeleteOnClose и при выходе из приложение вызываетсья closeAllWindows() etc. При этом происходит удаление всех окон и прога заверщает свою работу.

У antipart другой случай. Для вторго главного окна этот атрибут не задан, и при close не происходит его удаления. Окно просто хайдиться. В результате прога не завершае тсвою работу
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Вячеслав
Гость
« Ответ #28 : Ноябрь 29, 2007, 20:52 »

Гы Подмигивающий А позвать dumpObjectTree ()  от qApp'a не судьба ? и посмотреть хто остался жив ?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #29 : Ноябрь 29, 2007, 21:38 »

Гы Подмигивающий А позвать dumpObjectTree ()  от qApp'a не судьба ? и посмотреть хто остался жив ?

)))

Ну помоему и без dumpObjectTree() ясно кто весит
Записан

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


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