diff --git a/src/app/mainapplication.cpp b/src/app/mainapplication.cpp
index 2202c4561f27a14172e357b019830afc72d641d9..29c98343e564322587118621412ebaa14e27f357 100644
--- a/src/app/mainapplication.cpp
+++ b/src/app/mainapplication.cpp
@@ -105,7 +105,7 @@ ScreenInfo::onPhysicalDotsPerInchChanged()
 }
 
 MainApplication::MainApplication(int& argc, char** argv)
-    : QApplication(argc, argv)
+    : QApplication(argc, argv), isCleanupped(false)
 {
     const char* qtVersion = qVersion();
     qInfo() << "Using Qt runtime version:" << qtVersion;
@@ -401,7 +401,12 @@ MainApplication::initSystray()
 void
 MainApplication::cleanup()
 {
-    QApplication::exit(0);
+    // In Qt 6.5, QApplication::exit(0) will signal aboutToQuit, and aboutToQuit is connected to cleanup
+    // TODO: delete cleanup.
+    if (!isCleanupped) {
+        isCleanupped = true;
+        QApplication::exit(0);
+    }
 }
 
 #ifdef Q_OS_MACOS
diff --git a/src/app/mainapplication.h b/src/app/mainapplication.h
index 3e42b77444fccb3075a262c1338044e045d7050b..3fabd8e5b74f78d9dd903e6e57599bfaa4bd715e 100644
--- a/src/app/mainapplication.h
+++ b/src/app/mainapplication.h
@@ -121,4 +121,6 @@ private:
     QScopedPointer<ImageDownloader> imageDownloader_;
 
     ScreenInfo screenInfo_;
+
+    bool isCleanupped;
 };