我有一个有多个窗口的应用程序。当我关闭最后一个窗口时,我试图让程序提示我是否要退出。我想简单地以这种方式处理它:
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。但如果我在关闭下一个窗口之前等待几秒钟,它会减小。
似乎在窗口关闭的那一刻和它从该列表中删除的那一刻之间有一段时间。
有什么方法可以获取我在某个时刻打开的确切窗口数量吗?
或者也许有更好的方法来处理最后一个窗口销毁时的退出提示?