# When using QQuickVTKRenderItem, removing the render produces a memory leak

**URL:** https://discourse.vtk.org/t/when-using-qquickvtkrenderitem-removing-the-render-produces-a-memory-leak/8296
**Category:** Support
**Created:** [April 14, 2022, 3:24am UTC](https://discourse.vtk.org/t/when-using-qquickvtkrenderitem-removing-the-render-produces-a-memory-leak/8296 "2022-04-14T03:24:15Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![WangZP10969](https://discourse.vtk.org/user_avatar/discourse.vtk.org/wangzp10969/32/2579_2.png) [@WangZP10969](https://discourse.vtk.org/u/WangZP10969)
#### Post date: [April 14, 2022, 3:24am UTC](https://discourse.vtk.org/t/when-using-qquickvtkrenderitem-removing-the-render-produces-a-memory-leak/8296/1 "2022-04-14T03:24:16Z")

</div>

I recently tested the use of QtQuick(QT5.15) with VTK9.1. I checked the routines, and it can be displayed normally based on QQuickVTKRenderItem, but I am confused about how to safely clear the display of the window

When I use QVTKOpenGLNativeWidget with QWidget, I remove the render in the window, and then generate a new one for replacement. This method can be emptied normally and does not cause memory leaks.

```auto
struct WindowHandle
{
    vtkSmartPointer<vtkGenericOpenGLRenderWindow> Window = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
    vtkSmartPointer<vtkRenderWindowInteractor> RenderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
    vtkSmartPointer<vtkRenderer> Renderer = vtkSmartPointer<vtkRenderer>::New();
    QVTKOpenGLNativeWidget* OpenGLNativeWidget = nullptr;
}

WindowHandle.Window->AddRenderer(WindowHandle.Renderer);

WindowHandle.OpenGLNativeWidget = Widget;
WindowHandle.OpenGLNativeWidget->setRenderWindow(WindowHandle.Window);
WindowHandle.RenderWindowInteractor = WindowHandle.OpenGLNativeWidget->renderWindow()->GetInteractor();

WindowHandle.Window->RemoveRenderer(WindowHandle.Renderer);
WindowHandle.Renderer = vtkSmartPointer<vtkRenderer>::New();
WindowHandle.Window->AddRenderer(WindowHandle.Renderer);
WindowHandle.Window->Render();

```

But when working with QtQuick, the same code is used, but there is a memory leak. I don’t know if there is a problem with my operation, or does QtQuick need a different cleanup code?

```auto
struct WindowHandle
{
    vtkSmartPointer<vtkGenericOpenGLRenderWindow> Window = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
    vtkSmartPointer<vtkRenderWindowInteractor> RenderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
    vtkSmartPointer<vtkRenderer> Renderer = vtkSmartPointer<vtkRenderer>::New();
    QQuickVTKRenderItem* QQuickVTKItem = nullptr;
}

WindowHandle.Window->AddRenderer(WindowHandle.Renderer);

WindowHandle.QQuickVTKItem = QQuickVTKItem;
WindowHandle.QQuickVTKItem->renderWindow()->setRenderWindow(WindowHandle.Window);
WindowHandle.RenderWindowInteractor = WindowHandle.QQuickVTKItem->renderWindow()->renderWindow()->GetInteractor();

WindowHandle.Window->RemoveRenderer(WindowHandle.Renderer);
WindowHandle.Renderer = vtkSmartPointer<vtkRenderer>::New();
WindowHandle.Window->AddRenderer(WindowHandle.Renderer);
WindowHandle.Window->Render();

```
