make sure render-widget gets deleted when switching
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user