0

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

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();
    }
    }
}

如果我不急于关闭窗户,它会很好。但是如果我一个接一个关闭的太快,或者通过任务栏中的“RMB -> Close All”同时关闭它们,它们会在没有提示的情况下关闭。我插入的调试显示 的大小QApplication::topLevelWindows远高于 1。但如果我在关闭下一个窗口之前等待几秒钟,它会减小。

似乎在窗口关闭的那一刻和它从该列表中删除的那一刻之间有一段时间。

有什么方法可以获取我在某个时刻打开的确切窗口数量吗?

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

4

1 回答 1

1

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

如果窗口类不同,您可以将其保存在一些全局可访问的变量中。

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

于 2015-06-05T16:00:33.540 回答