make sure render-widget gets deleted when switching

This commit is contained in:
Joakim L. Gilje
2021-12-15 20:02:35 +01:00
parent d2115bc5e4
commit 1cc09b9033
2 changed files with 8 additions and 7 deletions

View File

@@ -164,8 +164,8 @@ void RendererStack::leaveEvent(QEvent* event)
void RendererStack::switchRenderer(Renderer renderer) { void RendererStack::switchRenderer(Renderer renderer) {
startblit(); startblit();
if (current != nullptr) { if (current) {
removeWidget(current); removeWidget(current.get());
} }
switch (renderer) { switch (renderer) {
@@ -173,7 +173,7 @@ void RendererStack::switchRenderer(Renderer renderer) {
{ {
auto sw = new SoftwareRenderer(this); auto sw = new SoftwareRenderer(this);
connect(this, &RendererStack::blitToRenderer, sw, &SoftwareRenderer::onBlit); connect(this, &RendererStack::blitToRenderer, sw, &SoftwareRenderer::onBlit);
current = sw; current.reset(sw);
} }
break; break;
case Renderer::OpenGL: case Renderer::OpenGL:
@@ -181,7 +181,7 @@ void RendererStack::switchRenderer(Renderer renderer) {
auto hw = new HardwareRenderer(this); auto hw = new HardwareRenderer(this);
connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit); connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit);
hw->setRenderType(HardwareRenderer::RenderType::OpenGL); hw->setRenderType(HardwareRenderer::RenderType::OpenGL);
current = hw; current.reset(hw);
break; break;
} }
case Renderer::OpenGLES: case Renderer::OpenGLES:
@@ -189,12 +189,12 @@ void RendererStack::switchRenderer(Renderer renderer) {
auto hw = new HardwareRenderer(this); auto hw = new HardwareRenderer(this);
connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit); connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit);
hw->setRenderType(HardwareRenderer::RenderType::OpenGLES); hw->setRenderType(HardwareRenderer::RenderType::OpenGLES);
current = hw; current.reset(hw);
break; break;
} }
} }
current->setFocusPolicy(Qt::NoFocus); current->setFocusPolicy(Qt::NoFocus);
addWidget(current); addWidget(current.get());
endblit(); endblit();
} }

View File

@@ -4,6 +4,7 @@
#include <QStackedWidget> #include <QStackedWidget>
#include <QKeyEvent> #include <QKeyEvent>
#include <QEvent> #include <QEvent>
#include <memory>
namespace Ui { namespace Ui {
class RendererStack; class RendererStack;
@@ -62,7 +63,7 @@ private:
int currentBuf = 0; int currentBuf = 0;
QVector<QImage> imagebufs; QVector<QImage> imagebufs;
QWidget* current = nullptr; std::unique_ptr<QWidget> current;
}; };
#endif // QT_RENDERERCONTAINER_HPP #endif // QT_RENDERERCONTAINER_HPP