Hi there, The issue raised in this thread:
http://thread.gmane.org/gmane.comp.lib.qt.user/1880 Can be simplified to this example: QWindow window; QWidget widget; window.show(); widget.show(); // This should not quit the application, because // the QWindow is still open. It does quit though, which is the bug. QTimer::singleShot(2000, &widget, SLOT(close())); Because quitOnLastWindowClosed is true by default, closing the QWidget causes a count of the remaining top level widgets, and if there are none visible left, the application quits. In Qt 5 we can have top-level QWindows as well as QWidgets, so we need to count both. Currently that is not done, but [1] fixes that. [1] https://codereview.qt-project.org/#change,26167 The problem is that there is an existing unit test which fails when QWindows are also counted. The reason for that can be seen with the patch and the behavior in this code: QWidget widget; QPointer<QWidget> childWindow = new QWidget(&widget, Qt::Window); widget.show(); childWindow->show(); // This should quit the application, but with the patch does not. The // problem is that the childWindow also has a QWindow backing it which // does not get hidden as a result of the childWindow parent being closed. QTimer::singleShot(2000, &widget, SLOT(close())); Before the patch, the closing of widget in this snippet would cause the loop in QApplication::shouldQuit to be executed, and eventually return true. Now it returns 'count the top-level QWindows and use that result'. To work around this issue I created another patch [2] to close the child windows of a widget if that widget itself is closed. I'm not certain it's the right solution though. Some code out there could be relying on the existing behavior that one can close a Dialog without its children closing. [2] https://codereview.qt-project.org/#change,26466 I'm looking for opinions and ideas for other ways to solve this problem. I think the patch at [1] should be applied. I'm not certain if [2] needs to be applied at all. If the parent of a QWidget(Qt::Window) is closed, and it is the last top-level window, is there any reason for the application not to quit (if quitOnLastWindowClosed is true)? I think it should quit, and then applying [1] would be enough. Thanks, -- Stephen Kelly <stephen.ke...@kdab.com> | Software Engineer KDAB (Deutschland) GmbH & Co.KG, a KDAB Group Company www.kdab.com || Germany +49-30-521325470 || Sweden (HQ) +46-563-540090 KDAB - Qt Experts - Platform-Independent Software Solutions
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development