2010-12-07 4 views
4

Мне нужно сделать некоторую работу прямо перед закрытием моего приложения (обратите внимание, что я сказал, что мое приложение и не это главное окно). Есть ли закрытие приложения или какой-либо другой способ сделать это?Qt - Как перехватить событие закрытия приложения (если оно есть)

Причина, по которой я не могу положиться на событие закрытия основного окна, заключается в том, что мое приложение запускается на фоне, оставляя значок в системном трее.

ответ

8

Ваша заявка, скорее всего, получена из QApplication. Вы можете поместить свой очищающий код в деструктор приложения:

class MyApp: public QApplication { 
public: 
    ~MyApp() { 
     // cleanup code here 
    } 
}; 

Или в вашем main(), вы, вероятно, что-то вроде этого:

int main(int argc, char *argv[]) { 
    MyApp a(argc, argv); 
    return a.exec(); 
} 

Вы можете сделать работу после вызова exec():

int main(int argc, char *argv[]) { 
    MyApp a(argc, argv); 
    int r = a.exec(); 
    // cleanup code here 
    return r; 
} 
+0

Я попробую второй вариант. Означает ли это, что ОС показывает это сообщение «Следующие приложения блокируют выключение»? – Raphael 2010-12-07 21:44:11

+0

@ Raphael: Если вы не пытаетесь сделать что-то, что требуется в любое время (например, если вы обратитесь к внешнему серверу), то вы должны быть в порядке. – 2010-12-07 21:46:26

16

Существует сигнал от QCoreApplication (унаследованный QApplication) под названием aboutToQuit, который является fi красный перед тем, как приложение завершится.

Смежные вопросы