我有一个额外的窗口,里面有一个文本编辑+ 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。
有谁可以帮我解决这个问题?
答案 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);