Macos 在Qt应用程序中如何捕获;Cmd-Q";或;“退出”;菜单点击
在我的Qt应用程序中,我有一个退出程序,在最终退出之前优雅地清理所有东西,否则可能会在某个地方崩溃。应用程序在系统托盘中运行,系统托盘图标定义了“退出”菜单。在quitAction上,我设置了菜单角色,使其与Mac的应用程序菜单合并,但我没有看到我的插槽被调用。代码如下: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(
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命令来对其进行分类-也许不应该退出,或者其他事情需要处理,因此需要取消退出。一个例子是:捕捉菜单退出,而不是一个下级窗口关闭按钮?