annndrey
Сен. 3, 2010 23:29:28
Добрый вечер.
Ситуация такова. Есть главное окно, есть несколько форм. В общем и целом главное окно и формы сгенерированы QtDesigner, потом доделаны руками.
Вначале показывается главное окно, из него можно вызввать формы.
Проблема в том, что после закрытия главного окна вызванные формы остаются висеть, пока хи не закроют. Хотелось бы услышать совет, как сделать так, чобы дочерние формы
автоматически закрывались после закрытия главного окна.
Спасибо.
dartNNN
Сен. 4, 2010 12:27:57
Можно сделать на основе mdi примера (там дочерние окна внутри основного, и делается все это через QMdiArea) если конечно подойдет. А если нет, то надо в этом примере mdiArea заменить, например, на простой список и самому написать функцию closeAllSubWindow(), где пробегать по списку и закрывать все окна (метод close()).
Вот как-то так.
pasaranax
Сен. 4, 2010 12:34:25
Ты, наверное, создаешь дочерние окна, как обычные виджеты без указания родителя?
Есть несколько путей:
1. Как сказал dartNNN, вести список окон и у родителя в closeEvent прописать их закрытие
2. Делать дочерние окна модальными (метод setModal()), чтобы они блокировали приложение, пока их вручную не закроешь
3. Использовать вместо QWidget QDialog и прописывать им родителя, тогда при закрытии родителя диалоги будут тоже закрываться. Предпочтительный метод, имхо.
Zubchick
Сен. 4, 2010 14:15:09
у любого виджета есть родитель, достаточно его указать чтобы при закрытии родителя остальные тоже закрывались.
вот посмотри примеры метод showAboutWindow
http://bitbucket.org/zubchick/madmodeller/src/tip/forms/MainForm.py#cl-243 ,
http://bitbucket.org/zubchick/madmodeller/src/tip/forms/about.py. Это были мои первые пробы пера, так что посмотри тока на идею)
annndrey
Сен. 4, 2010 22:11:24
Большое спасибо!
Разобрался. В методе closeEvent главного окна закрываю все дочерние окна.
Хотя, наверное, стоит потом попробовать переделать их в диалоги.
Но т.к. их не очень много, наверное оставлю список дочерних окон, которые необходимо закрывать при закрытии главного.