处理上次窗口关闭时的提示

Handling promt on last window close

本文关键字:提示 窗口 处理      更新时间:2023-10-16

我有一个应用程序,有多个窗口。当我关闭最后一个窗口时,我试图使程序提示我是否要退出。我想简单地这样处理:

void MainWindow::closeEvent (QCloseEvent *event)
{
    qDebug() << "QApplication::topLevelWindows().size()" << QApplication::topLevelWindows().size();
    if(QApplication::topLevelWindows().size() <= 1)
    {
    QMessageBox::StandardButton resBtn = QMessageBox::question( this, "APP_NAME",
                                                                tr("Are you sure?n"),
                                                                QMessageBox::No | QMessageBox::Yes,
                                                                QMessageBox::Yes);
    if (resBtn != QMessageBox::Yes) {
        event->ignore();
    } else {
        event->accept();
    }
    }
}

如果我不急于关闭窗户,它就会很好。但如果我一个接一个过快关闭,或者通过任务栏中的"人民币->全部关闭"同时关闭,它们就会自动关闭。我插入的调试显示,QApplication::topLevelWindows的大小远远大于1。但是如果我在关闭下一个窗口之前等待几秒钟,它就会减少。

从窗口关闭到将其从列表中删除之间似乎有一段时间

是否有办法得到我在某一时刻打开的窗口的确切数量?

或者也许有一个更好的方法来处理退出提示在最后窗口的销毁?

如果您的所有窗口继承MainWindow,您可以简单地在MinWindow类中保留一个静态整数变量,初始值为0。在构造函数中增加1,在closeEvent()中减少1。然后,在此变量中,当onClose()触发且value等于1时,获取用户确认。

如果窗口类不同,你可以把它保存在全局可访问的变量中。

如果您使用多个线程,请确保自动增加或减少此变量