Название: QMainWindow и дочерние диалоги Отправлено: XandoX от Июль 25, 2007, 14:15 Блин никак не могу понять. Есть значит MainWindow в нем создаю посредствам new еще парачку не модальных диалогов, тоесть висят себе и все, но когда закрываю главное окно приложение не завершается пока не закрою сами деалоги. Пробовал перегрузить quit, hide в MainWindow но они не вызываються, поставил флаг WA_QuitOnClose, не помогает, ставил флаг Qt::WA_DeleteOnClose получаю access vialation на выходе, что делать, как это исправить, подскажите плиз.
Название: QMainWindow и дочерние диалоги Отправлено: QCasper от Июль 25, 2007, 15:23 Можно, например, в closeEvent закрыть эти все диалоги, или сигнал QApplication::aboutToQuit() соединить со слотом close каждого диалога.
Хотя я подозреваю, что есть более простое и красивое решение. Название: QMainWindow и дочерние диалоги Отправлено: SABROG от Июль 25, 2007, 15:41 В конструкторе диалогов надо передавать parent по-нормальном QMainWindow класса, когда QMainWindow сдохнет при закрытии - остальные диалоги последуют за ним в ад. И это тоже прописать надо не забыть:
Код:
app - QApplication. Тогда выход будет, когда последнее окно без родителя (0), главное окно имеет установленный флаг Qt::WA_QuitOnClose. По-умолчанию на всех окнах кроме: splash screens, tool windows, and popup menus Название: QMainWindow и дочерние диалоги Отправлено: vaprele07 от Июль 25, 2007, 15:59 SABROG, много всего писать приходится, проще будет всем иметь парентом главное окно и в методе closeEvent главного окна сделать себе харакири: delete this;
Название: QMainWindow и дочерние диалоги Отправлено: pastor от Июль 25, 2007, 16:07 Цитата: "vaprele07" и в методе closeEvent главного окна сделать себе харакири: delete this; Бред!!! Зачем такое нужно? 2 XandoX: Приведи код, как ты создал диалоги. Установил литы парента для диалогов? Для главного окна поставь setAttribute(Qt::WA_DeleteOnClose). При этом главное окно должно быть создано димамичски (не в стеке!) Название: QMainWindow и дочерние диалоги Отправлено: XandoX от Июль 26, 2007, 08:20 дык, диалог создаю в конструкторе главного окна
типа dialog=new cMyDialog(this); а вот про то что главное окно создается в стеке я и забыл, поэтому и access vialation выподал видать. теперь все ясно. Название: QMainWindow и дочерние диалоги Отправлено: QCasper от Июль 26, 2007, 10:00 Код: int main(int argc, char *argv[]) При закрытии главного окна диалоги закрываются (ну закрываются или нет, вобщем пропадают), а приложение не выгружается. Название: QMainWindow и дочерние диалоги Отправлено: pastor от Июль 26, 2007, 10:55 Цитата: "QCasper" При закрытии главного окна диалоги закрываются (ну закрываются или нет, вобщем пропадают), а приложение не выгружается. Да, есть такое. Забыл совсем про это. Тогда пишем так Код: void scukkotest::closeEvent( QCloseEvent *evt ) или Код: void scukkotest::closeEvent( QCloseEvent *evt ) Название: QMainWindow и дочерние диалоги Отправлено: QCasper от Июль 26, 2007, 12:11 Цитата: "pastor" Цитата: "QCasper" При закрытии главного окна диалоги закрываются (ну закрываются или нет, вобщем пропадают), а приложение не выгружается. Да, есть такое. Забыл совсем про это. Тогда пишем так Код: void scukkotest::closeEvent( QCloseEvent *evt ) или Код: void scukkotest::closeEvent( QCloseEvent *evt ) ну это то понятно... Непонятно, почему слот quit не срабатывает по закрытию последнего окна... Название: QMainWindow и дочерние диалоги Отправлено: pastor от Июль 26, 2007, 12:26 При закрытии главного окна, диалоги не закрываються, они хайдятся. В результате приложение остаеться висеть в памяти.
Название: QMainWindow и дочерние диалоги Отправлено: QCasper от Июль 26, 2007, 12:54 Цитата: "pastor" При закрытии главного окна, диалоги не закрываються, они хайдятся. В результате приложение остаеться висеть в памяти. А разве разрушение главного не влечет за собой разрушение диалогов, учитывая, что они дочерние? Название: QMainWindow и дочерние диалоги Отправлено: XandoX от Июль 27, 2007, 09:44 Цитата: "QCasper" Цитата: "pastor" При закрытии главного окна, диалоги не закрываються, они хайдятся. В результате приложение остаеться висеть в памяти. А разве разрушение главного не влечет за собой разрушение диалогов, учитывая, что они дочерние? так, там то и все дело, что они не совсем дочернии. точнее они совсем не дочерними, если им поставить флаг дочернее окно, типа, то они становяться модальными окнами. А раз так, то при закрытии главного окна, если открыты диалоги, оно вроди как скрываються, но тоже странным образом, слот hide() не отрабатывает. я еще не разобралься почему так происходит Название: QMainWindow и дочерние диалоги Отправлено: QCasper от Июль 27, 2007, 10:10 Цитата: "XandoX" Цитата: "QCasper" Цитата: "pastor" При закрытии главного окна, диалоги не закрываються, они хайдятся. В результате приложение остаеться висеть в памяти. А разве разрушение главного не влечет за собой разрушение диалогов, учитывая, что они дочерние? так, там то и все дело, что они не совсем дочернии. точнее они совсем не дочерними, если им поставить флаг дочернее окно, типа, то они становяться модальными окнами. А раз так, то при закрытии главного окна, если открыты диалоги, оно вроди как скрываються, но тоже странным образом, слот hide() не отрабатывает. я еще не разобралься почему так происходит Почему это не дочернии, например в том коде, что я здесь приводил, явно передаётся this в конструктор. Название: QMainWindow и дочерние диалоги Отправлено: XandoX от Июль 27, 2007, 11:39 Цитата: "QCasper" Цитата: "XandoX" Цитата: "QCasper" Цитата: "pastor" При закрытии главного окна, диалоги не закрываються, они хайдятся. В результате приложение остаеться висеть в памяти. А разве разрушение главного не влечет за собой разрушение диалогов, учитывая, что они дочерние? так, там то и все дело, что они не совсем дочернии. точнее они совсем не дочерними, если им поставить флаг дочернее окно, типа, то они становяться модальными окнами. А раз так, то при закрытии главного окна, если открыты диалоги, оно вроди как скрываються, но тоже странным образом, слот hide() не отрабатывает. я еще не разобралься почему так происходит Почему это не дочернии, например в том коде, что я здесь приводил, явно передаётся this в конструктор. сори, что-то я ступил |