Skip to content
Altair Wei edited this page Oct 7, 2021 · 4 revisions

HiDPI 支持

WizNotePlus 的 HiDPI 支持是基于 Qt 的 HiDPI 技术,详情请见 High DPI Displays

WizNotePlus 启用了自动缩放比例检测,但这个机制只在整数倍缩放倍数时期作用,比如 200% (缩放比例为整数 2 ) DPI 缩放。非整数缩放比例需要用户手动设置。

参考资料:

1 方法一:设置环境变量

Qt 5.6 开始提供一种跨平台设置 HiDPI 缩放的方法。

Windows 下设置环境变量后请重启计算机使环境变量在桌面系统上生效。

  • QT_AUTO_SCREEN_SCALE_FACTOR : 它是一种布尔类型的环境变量,这意味着你可以将其设置为 0 表示 False ,设置为 1 表示 True。将该环境变量设置为 True 将会启用基于显示器像素密度的自动缩放,而且多个不同屏幕可能获得不同的缩放比例。值得注意的是,这个环境变量不会改变 point sized 字体,因为 point 本身是一种物理度量单位。
  • QT_SCALE_FACTOR : 该变量是一种数值型变量,它定义了一个应用程序全局的缩放比例,包括 point sized 字体。
  • QT_SCREEN_SCALE_FACTORS : 该变量是列表类型的变量,可以通过它来为每一个屏幕指定不同的缩放比例。这个变量的设置不会改变 point sized 字体。这个变量主要用来 debugging 的,或者用于那些有着错误 EDID 信息的显示器。这个变量的值可以是分号分割的缩放比例,顺序与 QGuiApplication::screens() 相同;也可以设置为 name=value 形式的键值对,其中 name 应该与 QScreen::name() 相同。

注意:非整数的缩放比例会引起显著缩放或渲染失真。Qt 的 Windows 风格GUI 样式会有一些显著的缺陷,所以 WizNotePlus 使用 Fusion GUI 。

一般来说,你只需要讲 QT_AUTO_SCREEN_SCALE_FACTOR 设置 1 就行了。

2 方法二:平台特异性设置法

2.1 Windows 下通过 qt.conf 设置

qt.conf 文件用来配置 Qt 库的行为,包括重写硬编码的路径配置传入 Platform Plugins 的参数以及一些其他设置比如 HiDPI 相关的支持。这个文件本质上是 INI 格式的纯文本文件,当它被放置在与可执行程序同一目录时,就能够被 QLibraryInfo 加载。

Windows 操作系统通过应用程序的 DPI Awareness 等级来控制缩放行为。

DPI Awareness Level Meaning
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 1920x1080 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.

如果想要兼容比较旧的应用程序,可以按照如下将其设置成 DPI Unaware

[Platforms]
WindowsArguments = dpiawareness=0

你也可以通过命令行参数传入设置,比如:

WizNote.exe -platform windows:dpiawareness=0

如果你的屏幕放大倍数不是整数,比如 125%,而应用程序又没有自动缩放,那么你可以这么设置环境变量:

QT_AUTO_SCREEN_SCALE_FACTOR=0
QT_SCALE_FACTOR=1.25

2.2 MacOS 下通过 Info.plist 设置

MacOS 操作系统实现了虚拟坐标系统,我个人认为它是对 HiDPI 支持最完美的操作系统。Mac 用户几乎不需要特别设置,操作系统以及 Qt 已经为你做好了一切。