C++ QIcon始终显示为2x dpi

C++ QIcon始终显示为2x dpi,c++,qt,dpi,C++,Qt,Dpi,我有一个额外的窗口,里面有一个文本编辑+qicon(我称之为浮动编辑) 我有2个QICON-用于普通DPI(16 x 16图标),它是2倍版本(32 x 32) 名称是正确的-它们类似于icon.png和icon@2x.png. 我需要从我的图标抓取pixmap并将其提供给第三方库 我无法直接向qicon提供信息,qpixmap在我的qt版本(5.6.2)中不支持dpi,因此我必须根据dpi进行转换 这是我的代码: // ... auto icon = QIcon(imageName); au

我有一个额外的窗口,里面有一个文本编辑+qicon(我称之为浮动编辑)
我有2个QICON-用于普通DPI(16 x 16图标),它是2倍版本(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>
/。。。
自动图标=QIcon(图像名称);
auto-availSizes=icon.availSizes();
自动大小=pFloatingEdit->window()->devicePixelRatio()==1?availSizes.first():availSizes.last();
自动pxm=图标.pixmap(大小);
自动w=pxm.width();
自动高度=像素高度();
// ... 
问题是我总是得到w和h等于32,但size变量尊重dpi,在100%dpi的情况下返回16 x 16,在200%的情况下返回32 x 32

有人能帮我解决这个问题吗?

试着自己设置设备像素比率

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

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

使用
=
运算符比较浮点数是错误的。pFloatingEdit->window()->devicePixelRatio()返回int。它从QpaintDevice调用devicePixelRatio是否有两个像素比率不同的监视器?(一个视网膜和一个非视网膜?)