Qt高清DPI下的显示,自适应分辨率

针对Qt要在windows高清DPI下进行显示,且相对于在分辨率下1920*1080上显示无异常,下面有几种方案:

方案1:使用配置文件qt.conf

在Qt配置文件qt.conf文件中进行配置,其中0,1,2对应Windows函数中的枚举变量,此种方案可以在DPI每次增加%25界面都会有相应的变化。详见Qt帮助文档 https://doc.qt.io/qt-5/highdpi.html

缺点:Qt界面会变得模糊,但不是很明显。

windows枚举变量,详见windows官方DPI

网址:https://docs.microsoft.com/zh-cn/windows/win32/api/shellscalingapi/ne-shellscalingapi-process_dpi_awareness

typedef enum PROCESS_DPI_AWARENESS {
  PROCESS_DPI_UNAWARE,
  PROCESS_SYSTEM_DPI_AWARE,
  PROCESS_PER_MONITOR_DPI_AWARE
} ;

  PROCESS_DPI_UNAWARE:此应用程序不会针对DPI更改进行缩放,并且始终假定比例因子为%100.它将由系统在任何其他DPI设置上自动缩放,会导致应用程序画面模糊。
  PROCESS_SYSTEM_DPI_AWARE:系统DPI识别。此应用程序无法扩展DPI更改。它将查询DPI一次,并在应用程序的生命周期中使用该值。如果DPI发生变化,则应用程序将不会调整为新的DPI值。当DPI从系统值更改时,系统将自动按比例放大或缩小,会使应用程序画面模糊,但比PROCESS_DPI_UNAWARE效果好。
  PROCESS_PER_MONITOR_DPI_AWARE:每个监视器DPI识别。此应用程序在创建DPI时检查DPI,并在DPI更改时调整比例因子。这些应用程序不会由系统自动扩展。设置后无效果。

使用方式:不需要写代码,只需添加资源配置文件qt.conf,路径必须为:/qt/etc/qt.conf

参数1对应上面枚举PROCESS_SYSTEM_DPI_AWARE

运行程序即可,qt会自动调用该配置文件

Qt高清DPI下的显示,自适应分辨率_第1张图片

方案2:使用环境变量

缺点:Qt界面不会以DPI每增加%25而改变,而是以成倍的增加,例如%150,会增加2倍!

QT_AUTO_SCREEN_SCALE_FACTOR[boolean]根据显示器的像素密度启用自动缩放。这不会改变点大小字体的大小,因为点是物理度量单位。多个屏幕可能会有不同的比例因子。

qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1");

使用方式:在QApplication声明前调用

Qt高清DPI下的显示,自适应分辨率_第2张图片

方案3:设置highDpi属性

和设置环境变量情况类似,缺点也一样

Qt高清DPI下的显示,自适应分辨率_第3张图片

小结:目前Qt尚未完全支持在完全不模糊且在每增加%25而进行改变界面的高DPI适配方案,希望能够帮到你。

你可能感兴趣的:(Qt)