c++ - 最后一个窗口关闭时的处理提示

标签 c++ qt qt5.4

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

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

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

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

有没有什么方法可以获取我在特定时刻打开的确切窗口数量?

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

最佳答案

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

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

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

关于c++ - 最后一个窗口关闭时的处理提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30670652/

相关文章:

c++ - QWebEnginePage 中的透明背景

c++ - 类的 index_sequence 用法

c++ - Arduino 上的十六进制乘法

c++ - qmake运行时如何将变量传递给qmake项目文件

qt - QML 中 ItemSelectionModel 的目的和用法

c++ - 如何在 TableView(QtQuick 2) 上显示来自 QSqlTableModel 的标题?

windows-7-x64 - QT Creator 5.4 中的 QVTKWidgetPlugin

c++ - Qt4 到 Qt5:带有 5 个参数的 QPainter::drawPixmapFragments() - 如何解决?

java - 安卓 native : cannot allocate large memory under native layer

C++ - 极其奇怪的机器代码行为