在最后一个窗口关闭处理promt

时间:2015-06-05 15:44:14

标签: c++ qt qt5.4

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

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

如果我不打算关闭窗户,那就行得很好。但是,如果我一个接一个地关闭它们,或者通过&#34; RMB - &gt;同时关闭它们。全部关闭&#34;在任务栏中,他们关闭时没有提示。我插入的调试显示QApplication::topLevelWindows的大小远远高于1.但如果我在关闭下一个窗口之前等待几秒钟,它会减少。

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

是否有某种方法可以获得我在某个时刻打开的确切数量的窗口?

或许还有一种更好的方法来处理最后窗口销毁的退出提示?

1 个答案:

答案 0 :(得分:1)

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

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

如果您使用多个线程,请确保以原子方式增加或减少此变量。