Automatic rescaling of an application on high-dpi Windows platform?

Applications that use fixed coordinates and sizes will look small on high-DPI resolutions. Although even if using layouts there are some issues regarding element and font sizes and margins. Fortunately there is support for high-DPI displays since Qt 5.4 as there has been many high-DPI issue fixes.

An application on Windows can assume one of the following levels of “DPI Awareness” (From the Qt documentation) :

  • DPI Unaware: This level has been introduced in Windows-Vista. Windows will pretend to the application that it is running on a
    standard display of 96 DPI of 1920×1080 and scale the application
    accordingly. It is intended to accommodate older applications designed
    for low DPI displays. Some artifacts may result from this type of
    scaling.
  • System-DPI Aware: This level has been introduced in Windows-Vista. It differs from Per-Monitor DPI Aware only when multiple monitors are
    connected. Windows will calculate a scaling suitable for all connected
    monitors.
  • Per-Monitor DPI Aware: This level has been introduced in Windows 8.1. Windows does not perform any scaling at all.

Also it states that :

Qt applications by default are Per-Monitor DPI Aware on Windows 8.1 or
System-DPI Aware on older versions of Windows. As of Qt 5.4, the level
can be specified by passing a parameter to the platform plugin (see
Using qt.conf):

<application> -platform windows:dpiawareness=0,1,2

You can read more information here.

In general to have a good UI on high-DPI displays, consider the following :

  • Use the latest version of Qt
  • Use layouts and avoid fixed sizes (unless you calculate scaling ratios on your own)
  • Make appropriate DPI-related settings depending on your application needs, for example set Qt::AA_UseHighDpiPixmaps attribute if you work with QPainter and pixmaps, or calculate a scaling ratio for adjusting certain element sizes in special situations.

Leave a Comment