diff --git a/src/gui/kernel/qhighdpiscaling.cpp b/src/gui/kernel/qhighdpiscaling.cpp
index 2fee06c77d695734a94ad58f56b8d212e6a7e252..8dd6c6687d31566be286ae297fa36a40f5f984c6 100644
--- a/src/gui/kernel/qhighdpiscaling.cpp
+++ b/src/gui/kernel/qhighdpiscaling.cpp
@@ -128,6 +128,7 @@ bool QHighDpiScaling::m_usePixelDensity; // use scale factor from platform plugi
 bool QHighDpiScaling::m_pixelDensityScalingActive; // pixel density scale factor > 1
 bool QHighDpiScaling::m_globalScalingActive; // global scale factor is active
 bool QHighDpiScaling::m_screenFactorSet; // QHighDpiScaling::setScreenFactor has been used
+QDpi QHighDpiScaling::m_logicalDpi; // The scaled logical DPI of the primary screen
 
 /*
     Initializes the QHighDpiScaling global variables. Called before the
@@ -159,6 +160,11 @@ void QHighDpiScaling::updateHighDpiScaling()
         }
     }
     m_active = m_globalScalingActive || m_screenFactorSet || m_pixelDensityScalingActive;
+
+    QPlatformScreen *primaryScreen = QGuiApplication::primaryScreen()->handle();
+    qreal sf = screenSubfactor(primaryScreen);
+    QDpi primaryDpi = primaryScreen->logicalDpi();
+    m_logicalDpi = QDpi(primaryDpi.first / sf, primaryDpi.second / sf);
 }
 
 /*
@@ -246,6 +252,11 @@ qreal QHighDpiScaling::screenSubfactor(const QPlatformScreen *screen)
     return factor;
 }
 
+QDpi QHighDpiScaling::logicalDpi()
+{
+    return m_logicalDpi;
+}
+
 qreal QHighDpiScaling::factor(const QScreen *screen)
 {
     // Fast path for when scaling in Qt is not used at all.
diff --git a/src/gui/kernel/qhighdpiscaling_p.h b/src/gui/kernel/qhighdpiscaling_p.h
index d60be8651829112344d280394bab9a88b3a64f8f..5dd9db68c4ec6f35cf22af2896c1daa0fd1d2fc5 100644
--- a/src/gui/kernel/qhighdpiscaling_p.h
+++ b/src/gui/kernel/qhighdpiscaling_p.h
@@ -57,6 +57,7 @@ Q_DECLARE_LOGGING_CATEGORY(lcScaling);
 
 class QScreen;
 class QPlatformScreen;
+typedef QPair<qreal, qreal> QDpi;
 
 class Q_GUI_EXPORT QHighDpiScaling {
 public:
@@ -73,6 +74,7 @@ public:
     static QPoint origin(const QPlatformScreen *platformScreen);
     static QPoint mapPositionFromNative(const QPoint &pos, const QPlatformScreen *platformScreen);
     static QPoint mapPositionToNative(const QPoint &pos, const QPlatformScreen *platformScreen);
+    static QDpi logicalDpi();
 private:
     static qreal screenSubfactor(const QPlatformScreen *screen);
 
@@ -82,6 +84,7 @@ private:
     static bool m_globalScalingActive;
     static bool m_pixelDensityScalingActive;
     static bool m_screenFactorSet;
+    static QDpi m_logicalDpi;
 };
 
 // Coordinate system conversion functions:
diff --git a/src/gui/kernel/qscreen.cpp b/src/gui/kernel/qscreen.cpp
index af88a44957cad698cd88cee3bc04263b8ab4e244..485bb983c0592a6f27e45e969593485f53a934c1 100644
--- a/src/gui/kernel/qscreen.cpp
+++ b/src/gui/kernel/qscreen.cpp
@@ -235,6 +235,8 @@ qreal QScreen::physicalDotsPerInch() const
 qreal QScreen::logicalDotsPerInchX() const
 {
     Q_D(const QScreen);
+    if (QHighDpiScaling::isActive())
+        return QHighDpiScaling::logicalDpi().first;
     return d->logicalDpi.first;
 }
 
@@ -249,6 +251,8 @@ qreal QScreen::logicalDotsPerInchX() const
 qreal QScreen::logicalDotsPerInchY() const
 {
     Q_D(const QScreen);
+    if (QHighDpiScaling::isActive())
+        return QHighDpiScaling::logicalDpi().first;
     return d->logicalDpi.second;
 }
 
@@ -267,7 +271,7 @@ qreal QScreen::logicalDotsPerInchY() const
 qreal QScreen::logicalDotsPerInch() const
 {
     Q_D(const QScreen);
-    QDpi dpi = d->logicalDpi;
+    QDpi dpi = QHighDpiScaling::isActive() ? QHighDpiScaling::logicalDpi() : d->logicalDpi;
     return (dpi.first + dpi.second) * qreal(0.5);
 }
 
diff --git a/src/plugins/platforms/windows/qwindowsscreen.cpp b/src/plugins/platforms/windows/qwindowsscreen.cpp
index 7f3bb96503e63df243d35c78d59120d6b4561589..391735a035740eaabf2d20e7dcd7bd7f333260b3 100644
--- a/src/plugins/platforms/windows/qwindowsscreen.cpp
+++ b/src/plugins/platforms/windows/qwindowsscreen.cpp
@@ -117,14 +117,12 @@ static bool monitorData(HMONITOR hMonitor, QWindowsScreenData *data)
         HDC hdc = CreateDC(info.szDevice, NULL, NULL, NULL);
 #endif
         if (hdc) {
-            if (!QHighDpiScaling::isActive()) { // Assume 96 DPI to get fonts right when scaling.
 #ifndef Q_OS_WINCE
-                const QDpi dpi = monitorDPI(hMonitor);
-                data->dpi = dpi.first ? dpi : deviceDPI(hdc);
+            const QDpi dpi = monitorDPI(hMonitor);
+            data->dpi = dpi.first ? dpi : deviceDPI(hdc);
 #else
-                data->dpi = deviceDPI(hdc);
+            data->dpi = deviceDPI(hdc);
 #endif
-            }
             data->depth = GetDeviceCaps(hdc, BITSPIXEL);
             data->format = data->depth == 16 ? QImage::Format_RGB16 : QImage::Format_RGB32;
             data->physicalSizeMM = QSizeF(GetDeviceCaps(hdc, HORZSIZE), GetDeviceCaps(hdc, VERTSIZE));