Nej*_*jat 10
使用固定坐标和大小的应用程序在高DPI分辨率下看起来很小.虽然即使使用布局,但在元素和字体大小和边距方面存在一些问题.幸运的是,从Qt 5.4开始就支持高DPI显示,因为有很多高DPI问题修复.
Windows上的应用程序可以采用以下级别的"DPI Awareness"(来自Qt文档):
- DPI Unaware:此级别已在Windows-Vista中引入.Windows将假装应用程序在96 DPI 1920x1080的标准显示器上运行并相应地扩展应用程序.它旨在适应为低DPI显示器设计的旧应用程序.这种缩放可能会导致一些伪影.
- System-DPI Aware:此级别已在Windows-Vista中引入.它仅在连接多个监视器时与Per-Monitor DPI Aware不同.Windows将计算适合所有连接的监视器的缩放比例.
- Per-Monitor DPI Aware:此级别已在Windows 8.1中引入.Windows根本不执行任何扩展.
它还声明:
默认情况下,Qt应用程序是Windows 8.1上的Per-Monitor DPI Aware或旧版Windows上的System-DPI Aware.从Qt 5.4开始,可以通过将参数传递给平台插件来指定级别(请参阅使用qt.conf):
Run Code Online (Sandbox Code Playgroud)<application> -platform windows:dpiawareness=0,1,2
您可以在此处阅读更多信息.
通常,要在高DPI显示器上拥有良好的UI,请考虑以下事项:
Qt::AA_UseHighDpiPixmaps如果使用set 属性QPainter和pixmaps,则设置属性,或计算在特殊情况下调整某些元素大小的缩放比例.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();
}
Run Code Online (Sandbox Code Playgroud)
或者设置系统环境变量:
QT_AUTO_SCREEN_SCALE_FACTOR=1
Run Code Online (Sandbox Code Playgroud)
我已经使用高DPI表面监视器在Windows 10上测试了这两种方法,并且结果按预期正确缩放.
这是在 Windows 上解决问题的最快方法。
在可执行文件旁边,创建一个 qt.conf 文件(如果还没有)并添加以下内容:
[Platforms]
WindowsArguments = dpiawareness=0
Run Code Online (Sandbox Code Playgroud)
放大时窗口会显得模糊。这个解决方案的一大优势是 Windows 进行缩放,而不是 Qt。因此,伪影的出现被最小化。此外,这可以适用于已经分发的应用程序,因为它不需要重建。
当然,这不是最令人愉快的结果,而是让你在短期内最快摆脱困境,让你毫无压力地开发出“真正的”DPI 感知版本的方法。
| 归档时间: |
|
| 查看次数: |
15611 次 |
| 最近记录: |