2013-11-11 5 views
2

В моем приложении Qt у меня есть рутинная процедура, которая изящно очищает все, прежде чем, наконец, уйдет, иначе может произойти сбой. Приложение запускается в системном трее, и для значка в системном трее есть меню «Выход». На quitAction я установил роль меню, чтобы он слился с меню приложений Mac, но я не вижу, как мой слот вызывается. Код ниже:В приложении Qt, как захватить меню «Cmd-Q» или «Выйти», нажмите

QAction *quitAction = new QAction(tr("&Quit"), this); 
quitAction->setMenuRole(QAction::QuitRole); 
connect(quitAction, SIGNAL(triggered()), this, SLOT(quittingApp())); 

Я также попытался захватить QCloseEvent на QApplication, но даже это не похоже на работу.

bool MyApplication::event(QEvent *ev) 
{ 
    bool eaten = false; 
    switch (ev->type()) 
    { 
    case QEvent::Close: 
    { 
     quittingApp(); //My quit cleanup routine 
     eaten = true; 
     break; 
    } 
    default: 
     eaten = QApplication::event(ev); 
     break; 
    } 
    return eaten; 
} 

Я пропустил что-то здесь? Каков наилучший способ иметь мою собственную процедуру очистки, которая вызывается во время выхода?

ответ

1

Подключение к сигналу QCoreApplication::aboutToQuit - лучший способ выполнить очистку последней секунды.

+0

Цикл событий будет выходить сразу после этого сигнала. Но в этом случае мой процесс очистки не будет действительно завершен, потому что это шаг за шагом процесс очистки, в котором должен быть запущен цикл событий. –

+1

@SoumyaDas: вы всегда можете вращать локальный цикл событий :) –

+0

Во всяком случае, я даже не вижу, что слот подключен к сигналу QCoreApplication :: aboutToQuit, поэтому я действительно не знаю, как сделать свою собственную очистку когда пользователь нажимает Cmd-Q, чтобы выйти. –