QIcon 始终显示为 2x dpi
QIcon is always showed as 2x dpi
我还有一个额外的 window,里面有一个文本编辑 + qicon(我称之为浮动编辑)。
我有 2 个 qicons - 用于通常的 DPI(16 x 16 图标),它是 2x 版本(32 x 32)。
名称是正确的 - 它们类似于 icon.png 和 icon@2x.png。
我需要从我的图标中获取像素图并将其提供给第 3 方库。
我不能直接喂 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,returns 在 100% dpi 的情况下为 16 x 16,在 200% 的情况下为 32 x 32。
谁能帮我解决这个问题?
尝试自己设置设备像素比。
当使用具有不同像素比的多个显示器时,QPixmap 无法正常工作。也许这是你的问题。因为 QPixmaps 中的 devicePixelRatio 始终是监视器中最高的。但来自 QWindow 的信息是正确的。所以 QWindow 中的设置 devicePixelRatio 应该可以解决这个问题。
auto icon = QIcon(imageName);
int pixelRatio = pFloatingEdit->window()->devicePixelRatio();
auto pxm = icon.pixmap(size);
pxm.setDevicePixelRatio(pixelRatio);
我还有一个额外的 window,里面有一个文本编辑 + qicon(我称之为浮动编辑)。
我有 2 个 qicons - 用于通常的 DPI(16 x 16 图标),它是 2x 版本(32 x 32)。
名称是正确的 - 它们类似于 icon.png 和 icon@2x.png。
我需要从我的图标中获取像素图并将其提供给第 3 方库。
我不能直接喂 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,returns 在 100% dpi 的情况下为 16 x 16,在 200% 的情况下为 32 x 32。
谁能帮我解决这个问题?
尝试自己设置设备像素比。
当使用具有不同像素比的多个显示器时,QPixmap 无法正常工作。也许这是你的问题。因为 QPixmaps 中的 devicePixelRatio 始终是监视器中最高的。但来自 QWindow 的信息是正确的。所以 QWindow 中的设置 devicePixelRatio 应该可以解决这个问题。
auto icon = QIcon(imageName);
int pixelRatio = pFloatingEdit->window()->devicePixelRatio();
auto pxm = icon.pixmap(size);
pxm.setDevicePixelRatio(pixelRatio);