目录标题
简介
高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 中源码
enumApplicationAttribute{// 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,#ifQT_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,#ifQT_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_EnableHighDpiScaling
和
Qt::AA_DisableHighDpiScaling
已经被弃用,因为 Qt 6 默认启用了高 DPI 缩放。这意味着在 Qt 6 中,你不需要(也不能)手动设置这些属性。
在 Qt 6 中,如果你需要调整 DPI 缩放行为,你应该使用环境变量或者
QGuiApplication::setHighDpiScaleFactorRoundingPolicy
方法。例如,你可以使用
QT_SCALE_FACTOR
环境变量来设置全局的缩放因子,或者使用
QT_SCREEN_SCALE_FACTORS
环境变量来为每个屏幕设置不同的缩放因子。
结语
在我们的编程学习之旅中,理解是我们迈向更高层次的重要一步。然而,掌握新技能、新理念,始终需要时间和坚持。从心理学的角度看,学习往往伴随着不断的试错和调整,这就像是我们的大脑在逐渐优化其解决问题的“算法”。
这就是为什么当我们遇到错误,我们应该将其视为学习和进步的机会,而不仅仅是困扰。通过理解和解决这些问题,我们不仅可以修复当前的代码,更可以提升我们的编程能力,防止在未来的项目中犯相同的错误。
我鼓励大家积极参与进来,不断提升自己的编程技术。无论你是初学者还是有经验的开发者,我希望我的博客能对你的学习之路有所帮助。如果你觉得这篇文章有用,不妨点击收藏,或者留下你的评论分享你的见解和经验,也欢迎你对我博客的内容提出建议和问题。每一次的点赞、评论、分享和关注都是对我的最大支持,也是对我持续分享和创作的动力。
** 阅读我的CSDN主页,解锁更多精彩内容:泡沫的CSDN主页**
版权归原作者 泡沫o0 所有, 如有侵权,请联系我们删除。