diff --git a/qt5/platforminputcontext/fcitx4inputcontextproxy.h b/qt5/platforminputcontext/fcitx4inputcontextproxy.h
index 650c27f..6c530ae 100644
--- a/qt5/platforminputcontext/fcitx4inputcontextproxy.h
+++ b/qt5/platforminputcontext/fcitx4inputcontextproxy.h
@@ -25,7 +25,7 @@ class Fcitx4InputContextProxy : public QObject {
     Q_OBJECT
 public:
     Fcitx4InputContextProxy(Fcitx4Watcher *watcher, QObject *parent);
-    ~Fcitx4InputContextProxy();
+    virtual ~Fcitx4InputContextProxy();
 
     bool isValid() const;
     void setDisplay(const QString &display);
diff --git a/qt5/platforminputcontext/fcitx4inputmethodproxy.h b/qt5/platforminputcontext/fcitx4inputmethodproxy.h
index 2354bde..94e6978 100644
--- a/qt5/platforminputcontext/fcitx4inputmethodproxy.h
+++ b/qt5/platforminputcontext/fcitx4inputmethodproxy.h
@@ -39,7 +39,7 @@ public:
                            const QDBusConnection &connection,
                            QObject *parent = nullptr);
 
-    ~Fcitx4InputMethodProxy();
+    virtual ~Fcitx4InputMethodProxy();
 
 public Q_SLOTS: // METHODS
     inline QDBusPendingReply<int, bool, unsigned int, unsigned int,
diff --git a/qt5/platforminputcontext/fcitx4watcher.h b/qt5/platforminputcontext/fcitx4watcher.h
index df4dbfd..05a9ed2 100644
--- a/qt5/platforminputcontext/fcitx4watcher.h
+++ b/qt5/platforminputcontext/fcitx4watcher.h
@@ -25,7 +25,7 @@ class Fcitx4Watcher : public QObject {
 public:
     explicit Fcitx4Watcher(QDBusConnection sessionBus,
                            QObject *parent = nullptr);
-    ~Fcitx4Watcher();
+    virtual ~Fcitx4Watcher();
     void watch();
     void unwatch();
 
diff --git a/qt5/platforminputcontext/fcitxcandidatewindow.h b/qt5/platforminputcontext/fcitxcandidatewindow.h
index 2f4e4a7..2e3d566 100644
--- a/qt5/platforminputcontext/fcitxcandidatewindow.h
+++ b/qt5/platforminputcontext/fcitxcandidatewindow.h
@@ -30,7 +30,7 @@ class FcitxCandidateWindow : public QWindow {
 public:
     explicit FcitxCandidateWindow(QWindow *window,
                                   QFcitxPlatformInputContext *context);
-    ~FcitxCandidateWindow();
+    virtual ~FcitxCandidateWindow();
 
     void render(QPainter *painter);
 
diff --git a/qt5/platforminputcontext/fcitxtheme.h b/qt5/platforminputcontext/fcitxtheme.h
index 170d07d..0302fcf 100644
--- a/qt5/platforminputcontext/fcitxtheme.h
+++ b/qt5/platforminputcontext/fcitxtheme.h
@@ -61,7 +61,7 @@ class FcitxTheme : public QObject {
     Q_OBJECT
 public:
     FcitxTheme(QObject *parent = nullptr);
-    ~FcitxTheme();
+    virtual ~FcitxTheme();
 
     void paint(QPainter *painter, const BackgroundImage &image, QRect region);
     void paint(QPainter *painter, const ActionImage &image, QPoint position,
diff --git a/qt5/platforminputcontext/hybridinputcontext.cpp b/qt5/platforminputcontext/hybridinputcontext.cpp
index ff2aa64..aedd2ab 100644
--- a/qt5/platforminputcontext/hybridinputcontext.cpp
+++ b/qt5/platforminputcontext/hybridinputcontext.cpp
@@ -33,6 +33,8 @@ HybridInputContext::HybridInputContext(FcitxQtWatcher *watcher,
     recheck();
 }
 
+HybridInputContext::~HybridInputContext() = default;
+
 void HybridInputContext::recheck() { timer_.start(); }
 
 void HybridInputContext::doRecheck(bool skipFcitx5) {
diff --git a/qt5/platforminputcontext/hybridinputcontext.h b/qt5/platforminputcontext/hybridinputcontext.h
index 5ecfb79..6be52dd 100644
--- a/qt5/platforminputcontext/hybridinputcontext.h
+++ b/qt5/platforminputcontext/hybridinputcontext.h
@@ -25,6 +25,7 @@ class HybridInputContext : public QObject {
 public:
     HybridInputContext(FcitxQtWatcher *watcher, Fcitx4Watcher *fcitx4Watcher,
                        QObject *parent);
+    virtual ~HybridInputContext();
 
     void focusIn();
     void focusOut();
