[Relacionado con la interfaz de usuario de Qt] Acerca de las propiedades de escalado de DPI alto en Qt5 y Qt6


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_EnableHighDpiScalinghabilitarlo 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_FACTORvariables de entorno para establecer el factor de escala global. Por ejemplo, si establece QT_SCALE_FACTOR=2, todas las ventanas y controles se duplicarán en tamaño.

  • Utilice QT_SCREEN_SCALE_FACTORSvariables de entorno para establecer diferentes factores de escala para cada pantalla. Por ejemplo, si tiene dos pantallas, puede configurar QT_SCREEN_SCALE_FACTORS=2;1.5esto 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::setHighDpiScaleFactorRoundingPolicyel 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 QApplicationrealizarse antes de crear el objeto, ya que afectan a todas las ventanas y controles. Si QApplicationcambia 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_EnableHighDpiScalingy Qt::AA_DisableHighDpiScalinghan 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::setHighDpiScaleFactorRoundingPolicymétodos de entorno. Por ejemplo, puede usar QT_SCALE_FACTORla variable de entorno para establecer un factor de escala global o usar QT_SCREEN_SCALE_FACTORSla 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
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_21438461/article/details/131760212
Recomendado
Clasificación