【Qt UI相关】Qt5和Qt6中关于高DPI缩放属性

简介: 【Qt UI相关】Qt5和Qt6中关于高DPI缩放属性

简介

高DPI(每英寸点数)显示器具有更高的像素密度,这意味着它们可以显示更清晰、更详细的图像。然而,如果应用程序不适应高DPI显示,它们可能会看起来模糊或者太小。为了解决这个问题,Qt提供了高DPI缩放支持。

Qt 5中,高DPI缩放默认是禁用的,你可以通过设置Qt::AA_EnableHighDpiScaling应用程序属性来启用它。然而,在Qt 6中,高DPI缩放默认是启用的,你不能禁用它,但你可以调整它的行为。

你可以使用以下方法来调整高DPI缩放:

  • 使用QT_SCALE_FACTOR环境变量来设置全局的缩放因子。例如,如果你设置QT_SCALE_FACTOR=2,那么所有的窗口和控件都会放大两倍。
  • 使用QT_SCREEN_SCALE_FACTORS环境变量来为每个屏幕设置不同的缩放因子。例如,如果你有两个屏幕,你可以设置QT_SCREEN_SCALE_FACTORS=2;1.5,这会使第一个屏幕的缩放因子为2,第二个屏幕的缩放因子为1.5。
  • 使用QGuiApplication::setHighDpiScaleFactorRoundingPolicy方法来设置缩放因子的舍入策略。这可以影响当你的缩放因子不是整数时,Qt如何处理像素的大小和位置。

请注意,这些设置应该在你创建QApplication对象之前进行,因为它们会影响所有的窗口和控件。如果你在创建QApplication对象之后改变这些设置,它们可能不会立即生效,或者可能不会影响所有的窗口和控件。

Qt5 中的用法

// 设置应用程序的 DPI 适应性,这可以使应用程序在高 DPI 屏幕上看起来更清晰
    QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

Qt6 中源码

enum ApplicationAttribute
    {
        // AA_ImmediateWidgetCreation = 0,
        // AA_MSWindowsUseDirect3DByDefault = 1,
        AA_DontShowIconsInMenus = 2,
        AA_NativeWindows = 3,
        AA_DontCreateNativeWidgetSiblings = 4,
        AA_PluginApplication = 5,
        AA_DontUseNativeMenuBar = 6,
        AA_MacDontSwapCtrlAndMeta = 7,
        AA_Use96Dpi = 8,
        AA_DisableNativeVirtualKeyboard = 9,
        // AA_X11InitThreads = 10,
        AA_SynthesizeTouchForUnhandledMouseEvents = 11,
        AA_SynthesizeMouseForUnhandledTouchEvents = 12,
#if QT_DEPRECATED_SINCE(6, 0)
        AA_UseHighDpiPixmaps Q_DECL_ENUMERATOR_DEPRECATED_X(
            "High-DPI pixmaps are always enabled. " \
            "This attribute no longer has any effect.") = 13,
#endif
        AA_ForceRasterWidgets = 14,
        AA_UseDesktopOpenGL = 15,
        AA_UseOpenGLES = 16,
        AA_UseSoftwareOpenGL = 17,
        AA_ShareOpenGLContexts = 18,
        AA_SetPalette = 19,
#if QT_DEPRECATED_SINCE(6, 0)
        AA_EnableHighDpiScaling Q_DECL_ENUMERATOR_DEPRECATED_X(
            "High-DPI scaling is always enabled. " \
            "This attribute no longer has any effect.") = 20,
        AA_DisableHighDpiScaling Q_DECL_ENUMERATOR_DEPRECATED_X(
            "High-DPI scaling is always enabled. " \
            "This attribute no longer has any effect.") = 21,
#endif
        AA_UseStyleSheetPropagationInWidgetStyles = 22,
        AA_DontUseNativeDialogs = 23,
        AA_SynthesizeMouseForUnhandledTabletEvents = 24,
        AA_CompressHighFrequencyEvents = 25,
        AA_DontCheckOpenGLContextThreadAffinity = 26,
        AA_DisableShaderDiskCache = 27,
        AA_DontShowShortcutsInContextMenus = 28,
        AA_CompressTabletEvents = 29,
        // AA_DisableWindowContextHelpButton = 30,
        AA_DisableSessionManager = 31,
        // Add new attributes before this line
        AA_AttributeCount
    };

在 Qt 6 中,Qt::AA_EnableHighDpiScalingQt::AA_DisableHighDpiScaling 已经被弃用,因为 Qt 6 默认启用了高 DPI 缩放。这意味着在 Qt 6 中,你不需要(也不能)手动设置这些属性。

在 Qt 6 中,如果你需要调整 DPI 缩放行为,你应该使用环境变量或者 QGuiApplication::setHighDpiScaleFactorRoundingPolicy 方法。例如,你可以使用 QT_SCALE_FACTOR 环境变量来设置全局的缩放因子,或者使用 QT_SCREEN_SCALE_FACTORS 环境变量来为每个屏幕设置不同的缩放因子。

结语

在我们的编程学习之旅中,理解是我们迈向更高层次的重要一步。然而,掌握新技能、新理念,始终需要时间和坚持。从心理学的角度看,学习往往伴随着不断的试错和调整,这就像是我们的大脑在逐渐优化其解决问题的“算法”。

这就是为什么当我们遇到错误,我们应该将其视为学习和进步的机会,而不仅仅是困扰。通过理解和解决这些问题,我们不仅可以修复当前的代码,更可以提升我们的编程能力,防止在未来的项目中犯相同的错误。

我鼓励大家积极参与进来,不断提升自己的编程技术。无论你是初学者还是有经验的开发者,我希望我的博客能对你的学习之路有所帮助。如果你觉得这篇文章有用,不妨点击收藏,或者留下你的评论分享你的见解和经验,也欢迎你对我博客的内容提出建议和问题。每一次的点赞、评论、分享和关注都是对我的最大支持,也是对我持续分享和创作的动力。

目录
相关文章
|
1月前
|
前端开发 搜索推荐 开发者
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
27 0
|
1月前
|
JavaScript 前端开发 开发者
SAP UI5 控件 sap.m.ListBase 的 inset 属性的作用介绍
SAP UI5 控件 sap.m.ListBase 的 inset 属性的作用介绍
15 0
|
1月前
|
XML 存储 数据格式
SAP UI5 控件 customData 属性的应用介绍
SAP UI5 控件 customData 属性的应用介绍
33 0
|
1月前
|
存储 测试技术 UED
Qt中实现界面回放的艺术:从理论到代码“ (“The Art of Implementing UI Playback in Qt: From Theory to Code
Qt中实现界面回放的艺术:从理论到代码“ (“The Art of Implementing UI Playback in Qt: From Theory to Code
66 1
|
1月前
|
存储 缓存
【Qt 全局属性相关】 Qt 应用程序行为的全局属性 Qt::ApplicationAttribute枚举解析
【Qt 全局属性相关】 Qt 应用程序行为的全局属性 Qt::ApplicationAttribute枚举解析
20 0
|
1月前
|
编译器 C语言 Android开发
Qt5安装及组件选择(Qt 5.12)
Qt5安装及组件选择(Qt 5.12)
75 2
|
1月前
|
Windows
Qt 5.14.2 打造跨平台应用的秘诀:用Visual Studio 2022和Qt 5.14.2轻松创建你的首个QT项目
Qt 5.14.2 打造跨平台应用的秘诀:用Visual Studio 2022和Qt 5.14.2轻松创建你的首个QT项目
|
1月前
|
数据可视化 数据库 C++
Qt 5.14.2揭秘高效开发:如何用VS2022快速部署Qt 5.14.2,打造无与伦比的Windows应用
Qt 5.14.2揭秘高效开发:如何用VS2022快速部署Qt 5.14.2,打造无与伦比的Windows应用
|
1月前
|
开发者 UED
关于 SAP UI5 sap.m.Column 的 demandPopin 属性
关于 SAP UI5 sap.m.Column 的 demandPopin 属性
15 0
|
1月前
|
存储 搜索推荐 BI
sap.ui.comp.filterbar.FilterBar 的 persistencyKey 属性的作用介绍
sap.ui.comp.filterbar.FilterBar 的 persistencyKey 属性的作用介绍
10 0

热门文章

最新文章

推荐镜像

更多