4

在我的 Qt 应用程序中,我有一个退出例程,它在最终退出之前优雅地清理所有内容,否则某处可能会发生崩溃。该应用程序在系统托盘中运行,并且为系统托盘图标定义了一个“退出”菜单。在 quitAction 上,我设置了菜单角色,以便它与 Mac 的应用程序菜单合并,但我没有看到我的插槽被调用。代码如下:

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

我也尝试在 QApplication 上捕获 QCloseEvent,但即使这样似乎也不起作用。

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;
}

我在这里错过了什么吗?在退出期间调用我自己的清理例程的最佳方法是什么?

4

1 回答 1

0

连接到QCoreApplication::aboutToQuit信号是执行最后一秒清理的最佳方式。

于 2013-11-11T17:28:58.903 回答