【发布时间】: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,所以我不能说,但我会保持这种可能性。我认为无论如何我都会通过保留我自己的未接受关闭事件的窗口计数而不是存在的窗口计数来做到这一点。即,我自己的非注定窗口数。