【问题标题】:Handling promt on last window close处理最后一个窗口关闭时的提示
【发布时间】:2015-06-05 15:44:13
【问题描述】:

我有一个有多个窗口的应用程序。当我关闭 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();
    }
    }
}

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

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

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

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

【问题讨论】:

  • 在调查发生的事情时,您必须保持打开窗口没有按照它们接受关闭事件的顺序被破坏的可能性。我不知道 Qt,所以我不能说,但我会保持这种可能性。我认为无论如何我都会通过保留我自己的未接受关闭事件的窗口计数而不是存在的窗口计数来做到这一点。即,我自己的非注定窗口数。

标签: c++ qt qt5.4


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多