В моем приложении 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;
}
Я пропустил что-то здесь? Каков наилучший способ иметь мою собственную процедуру очистки, которая вызывается во время выхода?
Цикл событий будет выходить сразу после этого сигнала. Но в этом случае мой процесс очистки не будет действительно завершен, потому что это шаг за шагом процесс очистки, в котором должен быть запущен цикл событий. –
@SoumyaDas: вы всегда можете вращать локальный цикл событий :) –
Во всяком случае, я даже не вижу, что слот подключен к сигналу QCoreApplication :: aboutToQuit, поэтому я действительно не знаю, как сделать свою собственную очистку когда пользователь нажимает Cmd-Q, чтобы выйти. –