2

Upgrading from Qt 5.4 to Qt 5.6 made all my .svg icons blurry/pixelated. I noticed this happens only on high density screens like on my MacBookPro Retina Display. I read the documentation of High DPI support in Qt 5.6 and I have set the QT_AUTO_SCREEN_SCALE_FACTOR=1 environment variable, but it didn't have much effect. Anybody has this issue? I have also found this bug report which probably relates to my question.

EDIT 1:

A simple example would be:

Image {
  source: my_icon.svg
  sourceSize.width: 50
  sourceSize.height: 50
  anchor.centerIn: parent
}
Silex
  • 2,583
  • 3
  • 35
  • 59
  • What scale factor is your display? The bug report only deals with decimal values. If it is a decimal value, then the bug report is the source of your problem. – jonspaceharper Jun 22 '16 at 19:54
  • I don't know, but if I force the scale factor with `QT_SCALE_FACTOR` to a non decimal value I have the same problem. – Silex Jun 22 '16 at 20:47

2 Answers2

3

This is an ugly hack, but it did the trick:

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
    }
}
Silex
  • 2,583
  • 3
  • 35
  • 59
  • Sadly this doesn't work on systems with mixed-DPI screens. There's a binding loop, so every time the Screen.devicePixelRatio changes, it settles on a new size - generally getting bigger every time... – Richard1403832 Sep 03 '21 at 08:38
  • Thanks for the heads up @Richard1403832, will try to reproduce. Btw I have since then upgraded all the way till Qt 5.12.6 and the issue is still present. – Silex Sep 07 '21 at 12:15
3

I'm not sure how to apply this in QML, but you need to set the attribute AA_UseHighDpiPixmaps with QWidgets. Might well be the same with QML. E.g:

app.setAttribute(Qt.AA_UseHighDpiPixmaps)
Ripdog
  • 181
  • 2
  • 11