QIcon 始终显示为 2x dpi

QIcon is always showed as 2x dpi

本文关键字:2x dpi 显示 QIcon      更新时间:2023-10-16

我有一个额外的窗口,里面有一个文本编辑+qicon(我称之为浮动编辑)。
我有 2 个 qicon - 用于通常的 DPI(16 x 16 图标),它是 2x 版本(32 x 32)。
名称是正确的 - 它们就像图标.png和icon@2x.png。
我需要从我的图标中获取像素图并将其提供给第三方库。
我不能直接输入 qicon,并且 qpixmap 在我的 qt 版本 (5.6.2) 中不尊重 dpi,所以我必须相对于 dpi 进行转换。
这是我的代码:

// ...
auto icon = QIcon(imageName);
auto availSizes = icon.availableSizes();
auto size = pFloatingEdit->window()->devicePixelRatio() == 1 ? availSizes.first() : availSizes.last();
auto pxm = icon.pixmap(size);
auto w = pxm.width();
auto h = pxm.height();
// ... <feeding to 3rd party>

问题是我总是得到 w 和 h 等于 32,但大小变量尊重 dpi 并在 16% dpi 的情况下返回 100 x 16,在 32% dpi 的情况下返回 32 x 200%。
任何人都可以帮助我解决这个问题吗?

尝试自行设置设备像素比。

当使用多个不同像素比的显示器时,QPixmap 无法正常工作。也许这是你的问题。因为那时QPixmaps中的设备PixelRatio始终是显示器中最高的。但来自QWindow的信息是正确的。因此,来自QWindow的设置设备PixelRatio应该可以解决此问题。

auto icon = QIcon(imageName);
int pixelRatio = pFloatingEdit->window()->devicePixelRatio();
auto pxm = icon.pixmap(size);
pxm.setDevicePixelRatio(pixelRatio);