Преглед на файлове

Delete QVTKWidgets when getting out of scope

Because QVTKWidgets don't have parents, we need to delete them manually
Julien Finet преди 13 години
родител
ревизия
cb26ae6b2d
променени са 1 файла, в които са добавени 19 реда и са изтрити 2 реда
  1. 19 2
      Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKMagnifyViewTest1.cpp

+ 19 - 2
Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKMagnifyViewTest1.cpp

@@ -20,6 +20,7 @@
 
 // Qt includes
 #include <QApplication>
+#include <QSharedPointer>
 #include <QTimer>
 
 // CTK includes
@@ -27,6 +28,10 @@
 
 // VTK includes
 #include <QVTKWidget.h>
+#include <vtkNew.h>
+#include <vtkRenderer.h>
+#include <vtkRendererCollection.h>
+#include <vtkRenderWindow.h>
 
 // STD includes
 #include <cstdlib>
@@ -95,11 +100,23 @@ int ctkVTKMagnifyViewTest1(int argc, char * argv [] )
     }
 
   // Adding / removing observed QVTKWidgets
-  QList<QVTKWidget *> allVTKWidgets;
+  QObject widgetParent;
+  QList<QVTKWidget* > allVTKWidgets;
+  QList<QSharedPointer<QVTKWidget> > widgetsToDelete;
   int numVTKWidgets = 3;
   for (int i = 0; i < numVTKWidgets; i++)
     {
-    allVTKWidgets.append(new QVTKWidget());
+    QVTKWidget* widget = new QVTKWidget();
+    allVTKWidgets.append(widget);
+    widgetsToDelete.append(QSharedPointer<QVTKWidget>(widget));
+
+    vtkNew<vtkRenderer> renderer;
+    widget->GetRenderWindow()->AddRenderer(renderer.GetPointer());
+    double gray = static_cast<double>(i) / (numVTKWidgets-1);
+    renderer->SetBackground( gray, gray, gray);
+    renderer->SetBackground2( 0., 0., 1.);
+    renderer->SetGradientBackground(true);
+    widget->show();
     }
 
   // Observe one widget