[Relacionado ao atributo global do Qt] Atributo global do comportamento do aplicativo Qt Qt::ApplicationAttribute análise de enumeração


Código-fonte da enumeração

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
    };

Enumeração

Esse tipo de enumeração Qt::ApplicationAttributedefine algumas propriedades globais que podem ser usadas para alterar o comportamento dos aplicativos Qt. A seguir estão as descrições de algumas propriedades:

  • AA_DontShowIconsInMenus: Se definido como verdadeiro, o item de menu não mostrará um ícone.
  • AA_NativeWindows: Se definido como verdadeiro, a janela nativa será usada, se possível. Caso contrário, o Qt tentará usar janelas filhas para reduzir o uso de recursos do sistema.
  • AA_DontCreateNativeWidgetSiblings: Se definido como verdadeiro, o Qt tentará evitar a criação de janelas irmãs da janela local. Isso pode afetar a ordem Z das janelas.
  • AA_PluginApplication: Se definido como verdadeiro, este aplicativo é considerado um plug-in e pode não ter uma janela principal.
  • AA_DontUseNativeMenuBar: Se definido como verdadeiro, o Qt não usará a barra de menu nativa, mas usará a implementação personalizada do Qt.
  • AA_Use96Dpi: Se definido como verdadeiro, o Qt assumirá que a tela tem um DPI de 96. Isso pode afetar os tamanhos de fonte e janela.
  • AA_DisableNativeVirtualKeyboard: Se definido como verdadeiro, o Qt não usará o teclado virtual nativo, mas usará a implementação personalizada do Qt.
  • AA_SynthesizeTouchForUnhandledMouseEvents: Se definido como verdadeiro, o Qt irá gerar eventos de toque para eventos de mouse não manipulados.
  • AA_SynthesizeMouseForUnhandledTouchEvents: Se definido como verdadeiro, o Qt irá gerar eventos de mouse para eventos de toque não tratados.
  • AA_ForceRasterWidgets: Se definido como verdadeiro, o Qt usará o mecanismo de grade para desenhar todas as janelas e controles em vez de usar o sistema de desenho nativo.
  • AA_UseDesktopOpenGL: Se definido como verdadeiro, o Qt usará o OpenGL da área de trabalho (em vez do OpenGL ES) para desenhar todas as janelas e controles.
  • AA_UseOpenGLES: Se definido como verdadeiro, o Qt usará o OpenGL ES (em vez do OpenGL de desktop) para desenhar todas as janelas e controles.
  • AA_UseSoftwareOpenGL: Se definido como verdadeiro, o Qt usará o OpenGL implementado por software (em vez do OpenGL acelerado por hardware) para desenhar todas as janelas e controles.
  • AA_ShareOpenGLContexts: Se definido como verdadeiro, o Qt compartilhará o contexto OpenGL o máximo possível para reduzir o uso de recursos do sistema.
  • AA_SetPalette: Se definido como verdadeiro, o Qt usará QApplication::palette()a paleta retornada para desenhar todas as janelas e controles em vez de usar cores locais.
  • AA_UseStyleSheetPropagationInWidgetStyles: Se definido como verdadeiro, o Qt usará a folha de estilo para alterar a aparência do controle em vez de usar o estilo local.
  • AA_DontUseNativeDialogs: Se definido como verdadeiro, o Qt não usará o diálogo nativo, mas usará a implementação personalizada do Qt.
  • AA_SynthesizeMouseForUnhandledTabletEvents: Se definido como verdadeiro, o Qt irá gerar eventos de mouse para eventos de tablet não tratados.
  • AA_CompressHighFrequencyEvents: Se definido como verdadeiro, o Qt compactará eventos de alta frequência, como eventos de movimento do mouse, para reduzir o uso de recursos do sistema.
  • AA_DontCheckOpenGLContextThreadAffinity: Se definido como verdadeiro, o Qt não verificará a afinidade de encadeamento do contexto OpenGL, o que pode afetar a renderização multiencadeada do OpenGL.
  • AA_DisableShaderDiskCache: Se definido como verdadeiro, o Qt não usará o cache de disco para armazenar shaders compilados, o que pode afetar o desempenho do OpenGL.
  • AA_DontShowShortcutsInContextMenus: Se definido como verdadeiro, a tecla de atalho no menu de contexto não será exibida.
  • AA_CompressTabletEvents: Se definido como verdadeiro, o Qt compactará os eventos do tablet para reduzir o uso de recursos do sistema.
  • AA_DisableSessionManager: Se definido como verdadeiro, o Qt não usará um gerenciador de sessão, o que pode afetar a inicialização e o encerramento do aplicativo.

Essas propriedades podem ser definidas e consultadas usando QCoreApplication::setAttributeas funções e . QCoreApplication::testAttributeEles devem QApplicationser definidos após a criação do objeto, mas antes da exibição de qualquer janela.

Exemplo abrangente

Aqui está um exemplo usando alguns Qt::ApplicationAttributeatributos:

#include <QApplication>
#include <QCoreApplication>
#include <QStyleFactory>

int main(int argc, char *argv[])
{
    
    
    QApplication a(argc, argv);

    // 设置应用程序的名称
    QCoreApplication::setApplicationName("My Application");

    // 设置应用程序的版本号
    QCoreApplication::setApplicationVersion("1.0.0");

    // 设置应用程序的组织名称
    QCoreApplication::setOrganizationName("My Organization");

    // 不在菜单中显示图标
    a.setAttribute(Qt::AA_DontShowIconsInMenus, true);

    // 使用本地窗口,而不是子窗口
    a.setAttribute(Qt::AA_NativeWindows, true);

    // 不使用本地的菜单栏,而是使用 Qt 的自定义实现
    a.setAttribute(Qt::AA_DontUseNativeMenuBar, true);

    // 为未处理的鼠标事件生成触摸事件
    a.setAttribute(Qt::AA_SynthesizeTouchForUnhandledMouseEvents, true);

    // 使用桌面 OpenGL(而不是 OpenGL ES)来绘制所有的窗口和控件
    a.setAttribute(Qt::AA_UseDesktopOpenGL, true);

    // 使用 `QApplication::palette()` 返回的调色板来绘制所有的窗口和控件,而不是使用本地的颜色
    a.setAttribute(Qt::AA_SetPalette, true);

    // 不使用本地的对话框,而是使用 Qt 的自定义实现
    a.setAttribute(Qt::AA_DontUseNativeDialogs, true);

    // 压缩高频率的事件,如鼠标移动事件,以减少系统资源的使用
    a.setAttribute(Qt::AA_CompressHighFrequencyEvents, true);

    // 不使用磁盘缓存来存储编译后的着色器,这可能会影响 OpenGL 的性能
    a.setAttribute(Qt::AA_DisableShaderDiskCache, true);

    // 使用 std::shared_ptr 创建 MainWindow 对象
    std::shared_ptr<MainWindow> mainWindow = std::make_shared<MainWindow>();
    mainWindow->show();

    return a.exec();
}

Este exemplo mostra como definir algumas propriedades globais para alterar o comportamento dos aplicativos Qt. Essas propriedades devem QApplicationser definidas após a criação do objeto, mas antes da exibição de qualquer janela. Observe que essas propriedades não são necessárias, elas dependem dos requisitos do seu aplicativo. Por exemplo, se seu aplicativo não requer fontes ou estilos específicos, ou seu aplicativo não precisa ter uma aparência nítida em telas de alto DPI, você pode omitir as configurações correspondentes.





# <font face="楷体" color=#984229 size =5> 结语 </font>

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

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

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



___
>   **<font face="楷体"  size =5> 阅读我的CSDN主页,解锁更多精彩内容:[泡沫的CSDN主页](https://blog.csdn.net/qq_21438461)</font>**
![在这里插入图片描述](https://img-blog.csdnimg.cn/8b1f73f1d9e44f5a886873e91756ae98.jpeg#pic_center)

Acho que você gosta

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