diff --git a/src/platform/qt/GBAApp.cpp b/src/platform/qt/GBAApp.cpp
index 084343b47..326bfbbcb 100644
--- a/src/platform/qt/GBAApp.cpp
+++ b/src/platform/qt/GBAApp.cpp
@@ -42,6 +42,9 @@ GBAApp::GBAApp(int& argc, char* argv[])
 	QApplication::setApplicationVersion(projectVersion);
 
 	Window* w = new Window(&m_configController);
+	connect(w, &Window::destroyed, [this]() {
+		m_windows[0] = nullptr;
+	});
 	m_windows[0] = w;
 
 #ifndef Q_OS_MAC
@@ -79,7 +82,11 @@ Window* GBAApp::newWindow() {
 		return nullptr;
 	}
 	Window* w = new Window(&m_configController, m_multiplayer.attached());
-	m_windows[m_multiplayer.attached()] = w;
+	int windowId = m_multiplayer.attached();
+	connect(w, &Window::destroyed, [this, windowId]() {
+		m_windows[windowId] = nullptr;
+	});
+	m_windows[windowId] = w;
 	w->setAttribute(Qt::WA_DeleteOnClose);
 #ifndef Q_OS_MAC
 	w->show();
diff --git a/src/platform/qt/Window.cpp b/src/platform/qt/Window.cpp
index c533c786e..6ba323078 100644
--- a/src/platform/qt/Window.cpp
+++ b/src/platform/qt/Window.cpp
@@ -68,6 +68,7 @@ Window::Window(ConfigController* config, int playerId, QWidget* parent)
 {
 	setFocusPolicy(Qt::StrongFocus);
 	setAcceptDrops(true);
+	setAttribute(Qt::WA_DeleteOnClose);
 	m_controller = new GameController(this);
 	m_controller->setInputController(&m_inputController);
 	m_controller->setOverrides(m_config->overrides());