Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 在Qt应用程序中如何捕获;Cmd-Q";或;“退出”;菜单点击_Macos_Qt_Qmenu_Qevent_Qaction - Fatal编程技术网

Macos 在Qt应用程序中如何捕获;Cmd-Q";或;“退出”;菜单点击

Macos 在Qt应用程序中如何捕获;Cmd-Q";或;“退出”;菜单点击,macos,qt,qmenu,qevent,qaction,Macos,Qt,Qmenu,Qevent,Qaction,在我的Qt应用程序中,我有一个退出程序,在最终退出之前优雅地清理所有东西,否则可能会在某个地方崩溃。应用程序在系统托盘中运行,系统托盘图标定义了“退出”菜单。在quitAction上,我设置了菜单角色,使其与Mac的应用程序菜单合并,但我没有看到我的插槽被调用。代码如下: QAction *quitAction = new QAction(tr("&Quit"), this); quitAction->setMenuRole(QAction::QuitRole); connect(

在我的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;
}

我是不是遗漏了什么?在退出期间调用我自己的清理例程的最佳方式是什么?

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

此信号发出后,事件循环将立即退出。但在这种情况下,我的清理过程不会真正完成,因为这是一个逐步清理过程,需要运行事件循环。@SoumyaDas:您始终可以旋转本地事件循环:)无论如何,我甚至看不到连接到QCoreApplication::aboutToQuit信号的插槽被调用,因此,当用户点击Cmd-Q退出时,我真的不知道如何进行我自己的清理。这真的不能回答问题。如何专门捕获菜单Quit命令来对其进行分类-也许不应该退出,或者其他事情需要处理,因此需要取消退出。一个例子是:捕捉菜单退出,而不是一个下级窗口关闭按钮?