ソースを参照

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