título del directorio
Introducción
Los monitores de alto DPI (puntos por pulgada) tienen una mayor densidad de píxeles, lo que significa que pueden mostrar imágenes más nítidas y detalladas. Sin embargo, si las aplicaciones no están adaptadas a pantallas de alto DPI, pueden aparecer borrosas o demasiado pequeñas. Para resolver este problema, Qt proporciona soporte de escalado alto de DPI.
En Qt 5, el escalado alto de DPI está deshabilitado de forma predeterminada, puede Qt::AA_EnableHighDpiScaling
habilitarlo configurando una propiedad de la aplicación. Sin embargo, en Qt 6, el escalado alto de DPI está habilitado de forma predeterminada, no puede deshabilitarlo, pero puede modificar su comportamiento.
Puede ajustar la escala de DPI alto usando:
-
Utilice
QT_SCALE_FACTOR
variables de entorno para establecer el factor de escala global. Por ejemplo, si estableceQT_SCALE_FACTOR=2
, todas las ventanas y controles se duplicarán en tamaño. -
Utilice
QT_SCREEN_SCALE_FACTORS
variables de entorno para establecer diferentes factores de escala para cada pantalla. Por ejemplo, si tiene dos pantallas, puede configurarQT_SCREEN_SCALE_FACTORS=2;1.5
esto para que la primera pantalla tenga un factor de escala de 2 y la segunda pantalla un factor de escala de 1,5. -
Utilice
QGuiApplication::setHighDpiScaleFactorRoundingPolicy
el método para establecer la estrategia de redondeo para el factor de escala. Esto puede afectar la forma en que Qt maneja el tamaño y la posición de los píxeles cuando su factor de escala no es un número entero.
Tenga en cuenta que estos ajustes deben QApplication
realizarse antes de crear el objeto, ya que afectan a todas las ventanas y controles. Si QApplication
cambia esta configuración después de crear el objeto, es posible que no surta efecto inmediatamente o que no afecte a todas las ventanas y controles.
Uso en Qt5
// 设置应用程序的 DPI 适应性,这可以使应用程序在高 DPI 屏幕上看起来更清晰
QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
Código fuente en 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
};
En Qt 6, Qt::AA_EnableHighDpiScaling
y Qt::AA_DisableHighDpiScaling
han quedado en desuso ya que Qt 6 tiene una escala de DPI alta habilitada de manera predeterminada. Esto significa que en Qt 6, no necesita (y no puede) establecer estas propiedades manualmente.
En Qt 6, si necesita ajustar el comportamiento de escalado de DPI, debe usar variables o QGuiApplication::setHighDpiScaleFactorRoundingPolicy
métodos de entorno. Por ejemplo, puede usar QT_SCALE_FACTOR
la variable de entorno para establecer un factor de escala global o usar QT_SCREEN_SCALE_FACTORS
la variable de entorno para establecer un factor de escala diferente para cada pantalla.
epílogo
La comprensión es un paso importante hacia el siguiente nivel en nuestro viaje de aprendizaje de programación. Sin embargo, dominar nuevas habilidades e ideas siempre requiere tiempo y persistencia. Desde un punto de vista psicológico, el aprendizaje suele ir acompañado de pruebas y errores y ajustes continuos, que es como si nuestro cerebro optimizara gradualmente su "algoritmo" para resolver problemas.
Por eso, cuando nos encontramos con errores, debemos verlos como oportunidades para aprender y mejorar, no solo como obsesiones. Al comprender y resolver estos problemas, no solo podemos corregir el código actual, sino también mejorar nuestra capacidad de programación y evitar que se cometan los mismos errores en proyectos futuros.
Animo a todos a participar activamente y mejorar continuamente sus habilidades de programación. Ya sea que sea un principiante o un desarrollador experimentado, espero que mi blog pueda ayudarlo en su viaje de aprendizaje. Si encuentra útil este artículo, puede hacer clic para marcarlo o dejar sus comentarios para compartir sus ideas y experiencias. También puede hacer sugerencias y preguntas sobre el contenido de mi blog. Cada me gusta, comentario, compartir y seguir es el mayor apoyo para mí y la motivación para seguir compartiendo y creando.
Lea mi página de inicio de CSDN para desbloquear contenido más emocionante: la página de inicio de Bubble CSDN