diff --git a/src/plugins/platforms/windows/qwindowstheme.cpp b/src/plugins/platforms/windows/qwindowstheme.cpp index 62ed4da5481..447973a1338 100644 --- a/src/plugins/platforms/windows/qwindowstheme.cpp +++ b/src/plugins/platforms/windows/qwindowstheme.cpp @@ -931,15 +931,18 @@ QPixmap QWindowsTheme::standardPixmap(StandardPixmap sp, const QSizeF &pixmapSiz } if (stockId != SIID_INVALID) { - QPixmap pixmap; SHSTOCKICONINFO iconInfo; memset(&iconInfo, 0, sizeof(iconInfo)); iconInfo.cbSize = sizeof(iconInfo); - stockFlags |= (pixmapSize.width() > 16 ? SHGFI_LARGEICON : SHGFI_SMALLICON); - if (SHGetStockIconInfo(stockId, SHGFI_ICON | stockFlags, &iconInfo) == S_OK) { - pixmap = qt_pixmapFromWinHICON(iconInfo.hIcon); - DestroyIcon(iconInfo.hIcon); - return pixmap; + stockFlags |= SHGSI_ICONLOCATION; + if (SHGetStockIconInfo(stockId, stockFlags, &iconInfo) == S_OK) { + const auto iconSize = pixmapSize.width(); + HICON icon; + if (SHDefExtractIcon(iconInfo.szPath, iconInfo.iIcon, 0, &icon, nullptr, iconSize) == S_OK) { + QPixmap pixmap = qt_pixmapFromWinHICON(icon); + DestroyIcon(icon); + return pixmap; + } } } diff --git a/src/widgets/styles/qcommonstyle.cpp b/src/widgets/styles/qcommonstyle.cpp index 106536cb028..57d823171ff 100644 --- a/src/widgets/styles/qcommonstyle.cpp +++ b/src/widgets/styles/qcommonstyle.cpp @@ -5616,8 +5616,10 @@ QIcon QCommonStylePrivate::iconFromWindowsTheme(QCommonStyle::StandardPixmap sta case QStyle::SP_MessageBoxQuestion: if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) { QPlatformTheme::StandardPixmap sp = static_cast(standardIcon); - for (int size = 16 ; size <= 32 ; size += 16) { - QPixmap pixmap = theme->standardPixmap(sp, QSizeF(size, size)); + const auto dpr = qt_getDevicePixelRatio(widget); + for (const int size : {16, 32}) { + QPixmap pixmap = theme->standardPixmap(sp, QSizeF(size, size) * dpr); + pixmap.setDevicePixelRatio(dpr); icon.addPixmap(pixmap, QIcon::Normal); } } @@ -5628,11 +5630,14 @@ QIcon QCommonStylePrivate::iconFromWindowsTheme(QCommonStyle::StandardPixmap sta QPlatformTheme::StandardPixmap spOff = static_cast(standardIcon); QPlatformTheme::StandardPixmap spOn = standardIcon == QStyle::SP_DirIcon ? QPlatformTheme::DirOpenIcon : QPlatformTheme::DirLinkOpenIcon; - for (int size = 16 ; size <= 32 ; size += 16) { - QSizeF pixSize(size, size); + const auto dpr = qt_getDevicePixelRatio(widget); + for (const int size : {16, 32}) { + const QSizeF pixSize = QSizeF(size, size) * dpr; QPixmap pixmap = theme->standardPixmap(spOff, pixSize); + pixmap.setDevicePixelRatio(dpr); icon.addPixmap(pixmap, QIcon::Normal, QIcon::Off); pixmap = theme->standardPixmap(spOn, pixSize); + pixmap.setDevicePixelRatio(dpr); icon.addPixmap(pixmap, QIcon::Normal, QIcon::On); } }