c++ - 退出应用程序调用两次关闭事件

标签 c++ macos qt qdialog

我在 OSX 上用 Qt/c++ 编写了一个应用程序。退出应用程序时,我正在捕获关闭事件以显示对话框

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 来说是正常的,至少我的 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();
        }
    }
}

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

关于c++ - 退出应用程序调用两次关闭事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30068710/

相关文章:

从子到父导航的 C++ 聚合

c++ - 如何在没有 X11 或/dev/fb0 的 Linux 中截屏?

qt - 将自定义协议(protocol)的插件添加到 Wireshark 中

c++ - 编译我自己的代码时权限被拒绝

c++ - 为什么此代码允许访问私有(private)变量

c++ - 为什么我的双端队列元素四处移动?

swift - 使用 iPhone 相机的 macOS App

macos - 我可以使用什么虚拟机在 Windows 中虚拟化 Mac OS?

ios - Mpmovieplayercontroller video pause while clicking button for another functional

c++ - Qt 中的面向切面编程