diff --git a/contrib/src/qt/0001-QEventDispatcherWin32-treat-posted-events-fairly.patch b/contrib/src/qt/0001-QEventDispatcherWin32-treat-posted-events-fairly.patch
new file mode 100644
index 0000000000000000000000000000000000000000..a18f6648842f2532446a9937867dcb17f433cf19
--- /dev/null
+++ b/contrib/src/qt/0001-QEventDispatcherWin32-treat-posted-events-fairly.patch
@@ -0,0 +1,148 @@
+From c60305a7564c63c9e175ba65e721df1db6855251 Mon Sep 17 00:00:00 2001
+From: Fatih Uzunoglu <fuzun54@outlook.com>
+Date: Tue, 18 Feb 2025 23:29:57 +0200
+Subject: [PATCH] QEventDispatcherWin32: treat posted events fairly
+
+By processing at least a batch of posted events
+while prioritizing other message types.
+---
+ src/corelib/kernel/qcoreapplication.cpp             | 10 ++++++++--
+ src/corelib/kernel/qcoreapplication_p.h             |  2 +-
+ src/corelib/kernel/qeventdispatcher_win.cpp         | 13 +++++++++++--
+ src/corelib/kernel/qeventdispatcher_win_p.h         |  2 +-
+ .../platform/windows/qwindowsguieventdispatcher.cpp |  4 ++--
+ .../platform/windows/qwindowsguieventdispatcher_p.h |  2 +-
+ 6 files changed, 24 insertions(+), 9 deletions(-)
+
+diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
+index 48c75973f7f..83ed71c23e9 100644
+--- a/src/corelib/kernel/qcoreapplication.cpp
++++ b/src/corelib/kernel/qcoreapplication.cpp
+@@ -1801,7 +1801,7 @@ void QCoreApplication::sendPostedEvents(QObject *receiver, int event_type)
+ }
+ 
+ void QCoreApplicationPrivate::sendPostedEvents(QObject *receiver, int event_type,
+-                                               QThreadData *data)
++                                               QThreadData *data, qsizetype count)
+ {
+     if (event_type == -1) {
+         // we were called by an obsolete event dispatcher.
+@@ -1873,7 +1873,13 @@ void QCoreApplicationPrivate::sendPostedEvents(QObject *receiver, int event_type
+     };
+     CleanUp cleanup(receiver, event_type, data);
+ 
+-    while (i < data->postEventList.size()) {
++    qsizetype amount;
++    if (count <= 0) // if 0, process all events, which is the default behavior
++        amount = data->postEventList.size();
++    else
++        amount = std::min<qsizetype>(i + count, data->postEventList.size());
++
++    while (i < amount) {
+         // avoid live-lock
+         if (i >= data->postEventList.insertionOffset)
+             break;
+diff --git a/src/corelib/kernel/qcoreapplication_p.h b/src/corelib/kernel/qcoreapplication_p.h
+index 0a51a0b5de8..dd85bb59d2c 100644
+--- a/src/corelib/kernel/qcoreapplication_p.h
++++ b/src/corelib/kernel/qcoreapplication_p.h
+@@ -107,7 +107,7 @@ public:
+     static QThread *mainThread();
+     static bool threadRequiresCoreApplication();
+ 
+-    static void sendPostedEvents(QObject *receiver, int event_type, QThreadData *data);
++    static void sendPostedEvents(QObject *receiver, int event_type, QThreadData *data, qsizetype count = 0);
+ 
+     static void checkReceiverThread(QObject *receiver);
+     void cleanupThreadData();
+diff --git a/src/corelib/kernel/qeventdispatcher_win.cpp b/src/corelib/kernel/qeventdispatcher_win.cpp
+index 78ad3d3edeb..7c247724d09 100644
+--- a/src/corelib/kernel/qeventdispatcher_win.cpp
++++ b/src/corelib/kernel/qeventdispatcher_win.cpp
+@@ -37,6 +37,8 @@ QT_BEGIN_NAMESPACE
+ #endif
+ #endif // QT_NO_GESTURES
+ 
++#define POSTEDEVENTS_BATCH 32
++
+ enum {
+     WM_QT_SOCKETNOTIFIER = WM_USER,
+     WM_QT_SENDPOSTEDEVENTS = WM_USER + 1,
+@@ -204,7 +206,14 @@ LRESULT QT_WIN_CALLBACK qt_internal_proc(HWND hwnd, UINT message, WPARAM wp, LPA
+         if (HIWORD(GetQueueStatus(mask)) == 0)
+             q->sendPostedEvents();
+         else
++        {
++            // Fair treatment for posted events,
++            // at least process some of the pending events:
++            q->sendPostedEvents(POSTEDEVENTS_BATCH);
++            // We still need this, because there can be more than
++            // POSTEDEVENTS_BATCH posted events waiting to be processed:
+             d->startPostedEventsTimer();
++        }
+         return 0;
+     } // switch (message)
+ 
+@@ -893,7 +902,7 @@ bool QEventDispatcherWin32::event(QEvent *e)
+     return QAbstractEventDispatcher::event(e);
+ }
+ 
+-void QEventDispatcherWin32::sendPostedEvents()
++void QEventDispatcherWin32::sendPostedEvents(qsizetype count)
+ {
+     Q_D(QEventDispatcherWin32);
+ 
+@@ -904,7 +913,7 @@ void QEventDispatcherWin32::sendPostedEvents()
+     // Allow posting WM_QT_SENDPOSTEDEVENTS message.
+     d->wakeUps.storeRelaxed(0);
+ 
+-    QCoreApplicationPrivate::sendPostedEvents(0, 0, d->threadData.loadRelaxed());
++    QCoreApplicationPrivate::sendPostedEvents(0, 0, d->threadData.loadRelaxed(), count);
+ }
+ 
+ HWND QEventDispatcherWin32::internalHwnd()
+diff --git a/src/corelib/kernel/qeventdispatcher_win_p.h b/src/corelib/kernel/qeventdispatcher_win_p.h
+index 558490a85e8..d805655b833 100644
+--- a/src/corelib/kernel/qeventdispatcher_win_p.h
++++ b/src/corelib/kernel/qeventdispatcher_win_p.h
+@@ -62,7 +62,7 @@ public:
+ 
+ protected:
+     QEventDispatcherWin32(QEventDispatcherWin32Private &dd, QObject *parent = nullptr);
+-    virtual void sendPostedEvents();
++    virtual void sendPostedEvents(qsizetype count = 0);
+     void doUnregisterSocketNotifier(QSocketNotifier *notifier);
+ 
+ private:
+diff --git a/src/gui/platform/windows/qwindowsguieventdispatcher.cpp b/src/gui/platform/windows/qwindowsguieventdispatcher.cpp
+index c2f0efe96ef..d3a818634fd 100644
+--- a/src/gui/platform/windows/qwindowsguieventdispatcher.cpp
++++ b/src/gui/platform/windows/qwindowsguieventdispatcher.cpp
+@@ -38,9 +38,9 @@ bool QWindowsGuiEventDispatcher::processEvents(QEventLoop::ProcessEventsFlags fl
+     return rc;
+ }
+ 
+-void QWindowsGuiEventDispatcher::sendPostedEvents()
++void QWindowsGuiEventDispatcher::sendPostedEvents(qsizetype count)
+ {
+-    QEventDispatcherWin32::sendPostedEvents();
++    QEventDispatcherWin32::sendPostedEvents(count);
+     QWindowSystemInterface::sendWindowSystemEvents(m_flags);
+ }
+ 
+diff --git a/src/gui/platform/windows/qwindowsguieventdispatcher_p.h b/src/gui/platform/windows/qwindowsguieventdispatcher_p.h
+index 7d326c07808..d7ee009f1a0 100644
+--- a/src/gui/platform/windows/qwindowsguieventdispatcher_p.h
++++ b/src/gui/platform/windows/qwindowsguieventdispatcher_p.h
+@@ -29,7 +29,7 @@ public:
+     static const char *windowsMessageName(UINT msg);
+ 
+     bool QT_ENSURE_STACK_ALIGNED_FOR_SSE processEvents(QEventLoop::ProcessEventsFlags flags) override;
+-    void sendPostedEvents() override;
++    void sendPostedEvents(qsizetype count = 0) override;
+ 
+ private:
+     QEventLoop::ProcessEventsFlags m_flags;
+-- 
+2.48.1
+
diff --git a/contrib/src/qt/rules.mak b/contrib/src/qt/rules.mak
index 3c44998e035f8b42331c3cce729ca6f0383c543f..891359d440f1e1714fe89268b826ce5fa944c8a7 100644
--- a/contrib/src/qt/rules.mak
+++ b/contrib/src/qt/rules.mak
@@ -54,6 +54,7 @@ qt: qtbase-everywhere-src-$(QTBASE_VERSION_FULL).tar.xz .sum-qt
 	$(APPLY) $(SRC)/qt/0001-disable-precompiled-headers-when-forcing-WINVER-inte.patch
 	$(APPLY) $(SRC)/qt/0001-Use-DirectWrite-font-database-only-with-Windows-10-a.patch
 	$(APPLY) $(SRC)/qt/0003-Do-not-link-D3D9.patch
+	$(APPLY) $(SRC)/qt/0001-QEventDispatcherWin32-treat-posted-events-fairly.patch
 	$(MOVE)
 
 ifdef HAVE_WIN32