退出申请致电两倍

Quit application call twice the closeevent

本文关键字:两倍 请致电 退出      更新时间:2023-10-16

我已经在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();
        }
    }
}

使用红十字会关闭或使用菜单"退出"时,对话框正确显示。

但是,当我使用右键单击码头上的图标关闭应用程序时,对话框出现两次,即关闭事件被称为两次。

任何想法为什么?

是的,我认为Mac对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();
        }
    }
}

默认情况下,Boolean变量M_ closing当然应在您的课程中由false初始化。这样,第二次什么都没做(将跳过处理)。这对我有用。

看起来这是一个qt错误:请参阅:https://bugreports.qt.io/browse/qtbug-43344

使用QT-5.6_4,
也有这个问题在我的情况下,它在使用CMD Q时发生了,但使用红色X按钮时没有发生。

使用了类似的补丁。
我避免了接受忽略,因为这是一个错误,我认为我们不应该"与之交谈" :-)

相反,我只是在调用更多时返回。

static int numCalled = 0;
if (numCalled++ >= 1)
    return;