Qt 应用程序中的高 dpi 缩放使图标变得平滑

Posted

技术标签:

【中文标题】Qt 应用程序中的高 dpi 缩放使图标变得平滑【英文标题】:High dpi scaling in Qt application make icons smoothed out 【发布时间】:2018-08-07 01:00:15 【问题描述】:

我使用QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); 在我的Qt 应用程序中启用了高dpi 支持,但现在我的图像看起来不清晰,反而看起来“平滑”了。例如,下面有一些按钮的图片,这些按钮旨在使用高 dpi 图像。当我禁用高 dpi 支持并手动缩放 ui 时,使用相同的图像,图标清晰明了。

我尝试设置Qt::AA_UseHighDpiPixmaps,但没有成功。 这是一个示例代码:

import QtQuick 2.11
import QtQuick.Window 2.11
import QtQuick.Controls 2.2

Window 
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    ToolButton
        anchors.centerIn: parent
        icon.source: "qrc:/ic_star_white_48dp.png"
    

我使用的图标来自谷歌材料设计图标,它是为高 dpi 屏幕设备制作的(分辨率为 192x192)。启用高 dpi 工具按钮中的图标会显得平滑。如果我禁用高 dpi 支持并将图标的高度和宽度(icon.heighticon.width)设置为640/160 * 48640 是我设备的 dpi),则图标清晰明了。但是,如果我启用高 dpi 并将高度和宽度设置为48,则图标不清晰。

【问题讨论】:

赢了?林?苹果电脑?移动的?我没有答案,也许对我也很重要。 抱歉忘了说,我在安卓上测试 【参考方案1】:

我猜 Qt 的图标属性会缩放图像以提高性能(例如 ToolButton 是 48 x 48,源图像将被缩放到 48 x 48),但不能补偿 HighDpiScaling。

例如,您的 ToolButton 通过 HighDpiScaling 从 48 x 48 逻辑像素缩放到 192 x 192 物理像素,但它仍然使用缩小后的 48 x 48 图像。

我倾向于使用:

ToolButton
anchors.centerIn: parent

    Image 
        anchors.centerIn: parent
        anchors.margins: 5
        //You can play around with those to balance quality and performance
        //mipmap: true
        //sourceSize.height: height * 2
        //sourceSize.width: width * 2
        fillMode: Image.PreserveAspectFit
        source: "qrc:/image.png"
    

【讨论】:

以上是关于Qt 应用程序中的高 dpi 缩放使图标变得平滑的主要内容,如果未能解决你的问题,请参考以下文章

更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小变得更大

Qt 5 缩放整个窗口

如何在 linux 的高 dpi 显示器上修复基于 java 的应用程序的缩放?

Qt之高DPI显示器 - 解决方案整理

qt 设计师:如何关闭 dpi 缩放

linux (wayland) 上的 SoapUI - 高 DPI/4K 缩放问题