QIcon 始终显示为 2x dpi
QIcon is always showed as 2x dpi
我有一个额外的窗口,里面有一个文本编辑+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);
相关文章:
- 当DPI感知,全屏和无框时,客户区域在WM_NCACTIVATE上擦除
- System Verilog DPI - 在 cpp 中运行并行线程,在 SV 中运行另一个并行线程
- 是否有提供可调整 dpi、可选文本和 CSS 支持的 HTML 到 PDF 渲染器?
- 在Qt5中缩放高DPI图像的最佳方法是什么?
- 是否可以在DPI中指定图标的大小或类似的内容
- Dealing with DPI and ID2D1RenderTarget::DrawBitmap
- 如何使MFC CToolbar按钮更加一致,以使Windows 7/10上的高DPI了解应用程序
- 在通过CPP项目开放时,为什么C#Winform与DPI 150%不同
- 如何在 DPI 感知设置为DPI_AWARENESS_CONTEXT_UNAWARE的情况下创建进程
- QIcon 始终显示为 2x dpi
- 如何通过 TWAIN 获取扫描仪的当前 DPI 设置
- QGraphicsView scaling with High DPI
- 使用DPI从C 函数中从SV中的读取值错误
- 创建后更改窗口的 DPI 感知
- chtmlview中的网页具有高DPI(150%)的显示错误
- 如何在 C(最好)或 C++ 的字符数组或字符串中附加"%.2X"数据?
- Set DPI for QImage
- 64位数字到2x 32位
- QTextDocument::d rawContents 仅以 96 dpi 呈现
- 检索辅助监视器的 DPI 的正确方法是什么?