Russian Qt Forum

Qt => Вопросы новичков => Тема начата: vanix от Февраль 16, 2011, 18:41



Название: Сигналы
Отправлено: vanix от Февраль 16, 2011, 18:41
Какой сигнал отправляет виджет при закрытие?
К примеру, при закрытии виджета закрыть полностью приложение
Код:
QApplication a(argc, argv);
QWidget mainWidget;
QObject::connect(&mainWidget, SIGNAL(destroyed()),&a,SLOT(quit()));
Вышеприведенный пример нерабочий, что не правильно?


Название: Re: Сигналы
Отправлено: shirushizo от Февраль 16, 2011, 19:20
При закрытии выполняется closeEvent, который можно переопределить.
Чтобы программа выходила при закрытии всех окон используй:
Код:
void QApplication::setQuitOnLastWindowClosed(bool quit)
void QApplication::lastWindowClosed ()   [signal]
Можно методом
Код:
void QWidget::setAttribute ( Qt::WidgetAttribute attribute, bool on = true )
установить атрибут Qt::WA_DeleteOnClose и тогда сигнал destroyed скорее всего будет высылаться при закрытии.


Название: Re: Сигналы
Отправлено: Пантер от Февраль 16, 2011, 19:34
Сигнал destroyed вызовется только после уничтожения объекта. :) А когда ты закрываешь окно, этот сигнал не испускается.


Название: Re: Сигналы
Отправлено: vanix от Февраль 16, 2011, 20:22
с использованием Qt::WA_DeleteOnClose завершается работа приложения аварийно(но работает)) ),
а вот по поводу переопределения closeEvent, я так понимаю, необходимо создать класс, пронаследовать его от QWidget и изменить ему обработчик метода closeEvent?


Название: Re: Сигналы
Отправлено: Пантер от Февраль 16, 2011, 21:25
Сделай setQuitOnLastWindowClosed (true) и не парься.


Название: Re: Сигналы
Отправлено: vanix от Февраль 17, 2011, 04:11
Спасибо всем.