Qt: fixed destroyAllWindow crash (patch #794)
authorIlya Lysenkov <no@email>
Thu, 16 Jun 2011 15:48:01 +0000 (15:48 +0000)
committerIlya Lysenkov <no@email>
Thu, 16 Jun 2011 15:48:01 +0000 (15:48 +0000)
modules/highgui/src/window_QT.cpp

index 5ff586d..91e6288 100755 (executable)
@@ -988,16 +988,25 @@ void GuiReceiver::destroyAllWindow()
                //#TODO check externalQAppExists and in case it does, close windows carefully,\r
                //      i.e. apply the className-check from below...\r
                qApp->closeAllWindows();\r
-       }else{\r
-\r
-               foreach (QObject *obj, QApplication::topLevelWidgets())\r
+       }\r
+       else\r
+       {\r
+               bool isWidgetDeleted = true;\r
+               while(isWidgetDeleted)\r
                {\r
-                       if (obj->metaObject ()->className () == QString("CvWindow"))\r
+                       isWidgetDeleted = false;
+                       QWidgetList list = QApplication::topLevelWidgets();\r
+                       for (int i = 0; i < list.count(); i++)\r
                        {\r
-                               delete obj;\r
+                               QObject *obj = list.at(i);\r
+                               if (obj->metaObject ()->className () == QString("CvWindow"))\r
+                               {\r
+                                       delete obj;\r
+                                       isWidgetDeleted = true;\r
+                                       break;\r
+                               }\r
                        }\r
                }\r
-\r
        }\r
 \r
 }\r