QIcon始终显示为2x dpi

时间:2017-02-01 08:57:01

标签: c++ qt dpi

我有一个额外的窗口,里面有一个文本编辑+ qicon(我称之为浮动编辑)。
我有2个qicons - 通常的DPI(16 x 16图标)和它的2x版本(32 x 32)。
名称是正确的 - 它们就像icon.png和icon@2x.png。
我需要从我的图标中获取pixmap并将其提供给第三方库。
我不能直接提供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并且在100%dpi的情况下返回16 x 16而在200%的情况下返回32 x 32。
有谁可以帮我解决这个问题?

1 个答案:

答案 0 :(得分:1)

尝试自己设置设备像素比率。

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

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