在高分辨率Windows平台上自动重新调整应用程序的大小?

我正在写一个需要在高分辨率Windows(192dpi而不是96dpi)上运行的Qt应用程序。

不幸的是,Qt框架还没有支持高DPI(至less在Windows上),所以我的应用程序和它的所有元素看起来应该是它的一半。

有什么办法强制/模拟Windows自动升级这些应用程序?

Solutions Collecting From Web of "在高分辨率Windows平台上自动重新调整应用程序的大小?"

使用固定坐标和大小的应用程序在高DPI分辨率上看起来很小。 尽管即使使用布局,也有一些关于元素和字体大小和边距的问题。 幸运的是,自从Qt5.4以来,已经有很多高 DPI显示的支持,因为已经有很多高DPI问题的修复 。

Windows上的应用程序可以采用以下级别的“DPI意识”(来自Qt文档):

  • DPI Unaware:这个级别已经在Windows-Vista中引入。 Windows将伪装成在1920×1080的96 DPI的标准显示器上运行的应用程序,并相应地缩放应用程序。 它旨在适应为低DPI显示设计的旧应用程序。 这种类型的缩放可能会导致一些工件。
  • System-DPI Aware:这个级别已经在Windows-Vista中引入。 只有在连接了多台显示器的情况下,它与每台显示器的DPI Aware不同。 Windows将计算适合所有连接的显示器的缩放比例。
  • 每个监视器DPI Aware:此级别已在Windows 8.1中引入。 Windows根本不执行任何缩放。

还指出:

Qt应用程序默认情况下是在Windows 8.1上的Per-Monitor DPI Aware或在较早版本的Windows上的System-DPI Aware。 从Qt 5.4开始,可以通过向平台插件传递参数来指定级别(请参阅使用qt.conf):

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

你可以在这里阅读更多的信息。

一般来说,在高DPI显示器上有一个良好的用户界面,请考虑以下几点:

  • 使用最新版本的Qt
  • 使用布局和避免固定的大小(除非你自己计算缩放比例)
  • 根据您的应用程序需要设置相应的DPI相关设置,例如,如果使用QPainter和pixmaps设置Qt::AA_UseHighDpiPixmaps属性,或者在特殊情况下计算调整某些元素大小的缩放比例。

Qt完全支持从Qt 5.6开始的高级DPI监视器,通过属性或环境变量(除了支持本机的OS X之外)。 对于属性方法,使用:

 #include <QApplication> int main(int argc, char *argv[]) { QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // DPI support QApplication app(argc, argv); return app.exec(); } 

或者设置系统环境变量:

 QT_AUTO_SCREEN_SCALE_FACTOR=1 

我已经使用高DPI表面监视器监视器在Windows 10上测试了这两种方法,并按预期正确调整了结果。

我正在使用Qt 4.8。 首先,你应该使用布局。 我的目标是防止用户调整对话框,窗体等。

我通过把这个代码放在对话框构造函数中,在不同的DPI上得到了正确的显示结果

 adjustSize(); setFixedSize(size()); 

第一行adjustSize()调整对话框的大小以适应其内容。 第二行setFixedSize(size())将对话框的大小调整为内容并防止用户调整其大小。 您不必设置尺寸政策。