【问题标题】:How to make svg icons crisp again in Qt 5.6 on high DPI screens如何在 Qt 5.6 中在高 DPI 屏幕上使 svg 图标再次清晰
【发布时间】:2016-10-24 21:41:32
【问题描述】:

从 Qt 5.4 升级到 Qt 5.6 使我所有的 .svg 图标变得模糊/像素化。我注意到这只发生在高密度屏幕上,比如我的 MacBookPro Retina 显示器。我在 Qt 5.6 中阅读了 High DPI support 的文档,并设置了 QT_AUTO_SCREEN_SCALE_FACTOR=1 环境变量,但它没有太大效果。有人有这个问题吗?我还发现了可能与我的问题有关的this 错误报告。

编辑 1:

一个简单的例子是:

Image {
  source: my_icon.svg
  sourceSize.width: 50
  sourceSize.height: 50
  anchor.centerIn: parent
}

【问题讨论】:

  • 您的显示比例是多少?错误报告仅处理十进制值。如果是十进制值,那么错误报告就是问题的根源。
  • 我不知道,但如果我将QT_SCALE_FACTOR 的比例因子强制为非十进制值,我也会遇到同样的问题。

标签: qt qt5.4 qt5.6


【解决方案1】:

这是一个丑陋的黑客,但它成功了:

Item {
    property alias image: mySvgImage

    implicitWidth: mySvgImage.paintedWidth
    implicitHeight: mySvgImage.implicitHeight / Screen.devicePixelRatio

    Image {
        id: mySvgImage

        sourceSize.width: width * Screen.devicePixelRatio
        sourceSize.height: height * Screen.devicePixelRatio
    }
}

【讨论】:

  • 遗憾的是,这不适用于具有混合 DPI 屏幕的系统。有一个绑定循环,所以每次 Screen.devicePixelRatio 改变时,它都会设置一个新的大小 - 通常每次都会变大......
  • 感谢@Richard1403832 的提醒,将尝试重现。顺便说一句,从那以后我一直升级到 Qt 5.12.6,问题仍然存在。
【解决方案2】:

我不确定如何在 QML 中应用它,但您需要使用 QWidgets 设置属性AA_UseHighDpiPixmaps。可能与 QML 相同。例如:

app.setAttribute(Qt.AA_UseHighDpiPixmaps)

【讨论】:

  • 这个问题与 QML 有关,但您仍然发布了一个非常有用的答案。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-09
  • 1970-01-01
  • 1970-01-01
  • 2016-06-05
相关资源
最近更新 更多