退出应用程序调用两次closeevent

Seb*_*Seb 6 c++ macos qt qdialog

我在OSX上用Qt/c ++编写了一个应用程序.退出应用程序时,我正在捕捉closeevent以显示对话框

void MainUI::closeEvent (QCloseEvent *event)
{
    if( DeviceUnplugged == false) {
        ExitDialog = new DialogExit;
        ExitDialog->exec();
        if(ExitDialog->result() == QDialog::Accepted) {
            m_device.CloseDevice();
            event->accept();
        }
        else {
            event->ignore();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

使用红叉或使用"退出"菜单关闭时,会正确显示该对话框.

但是当我使用右键单击停靠栏中的图标关闭应用程序时,会出现两次对话框,两次调用关闭事件.

知道为什么吗?

dem*_*lus 2

是的,我认为这对于 Mac 来说是正常的,至少我的 Qt 应用程序中也有这个(仅在 Mac 上)。

我使用了以下解决方法:

void MainUI::closeEvent (QCloseEvent *event)
{
    if (m_closing)
    {
        event->accept();
        return;
    }
    if( DeviceUnplugged == false) {
        ExitDialog = new DialogExit;
        ExitDialog->exec();
        if(ExitDialog->result() == QDialog::Accepted) {
            m_device.CloseDevice();
            m_closing = true;
            event->accept();
        }
        else {
            event->ignore();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

默认情况下,布尔变量 m_closing当然应该false在您的类中初始化。这样第二次就什么也不做(处理将被跳过)。这对我有用。