枚举源码
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::ApplicationAttribute
定义了一些可以用来改变 Qt 应用程序行为的全局属性。以下是一些属性的描述:
AA_DontShowIconsInMenus
: 如果设置为 true,菜单项将不显示图标。AA_NativeWindows
: 如果设置为 true,将尽可能使用本地窗口。否则,Qt 将尝试使用子窗口来减少系统资源的使用。AA_DontCreateNativeWidgetSiblings
: 如果设置为 true,Qt 将尽可能避免创建本地窗口的兄弟窗口。这可能会影响窗口的 Z 顺序。AA_PluginApplication
: 如果设置为 true,这个应用程序被认为是一个插件,可能没有一个主窗口。AA_DontUseNativeMenuBar
: 如果设置为 true,Qt 将不使用本地的菜单栏,而是使用 Qt 的自定义实现。AA_Use96Dpi
: 如果设置为 true,Qt 将假设屏幕的 DPI 为 96。这可能会影响字体和窗口的大小。AA_DisableNativeVirtualKeyboard
: 如果设置为 true,Qt 将不使用本地的虚拟键盘,而是使用 Qt 的自定义实现。AA_SynthesizeTouchForUnhandledMouseEvents
: 如果设置为 true,Qt 将为未处理的鼠标事件生成触摸事件。AA_SynthesizeMouseForUnhandledTouchEvents
: 如果设置为 true,Qt 将为未处理的触摸事件生成鼠标事件。AA_ForceRasterWidgets
: 如果设置为 true,Qt 将使用栅格引擎来绘制所有的窗口和控件,而不是使用本地的绘图系统。AA_UseDesktopOpenGL
: 如果设置为 true,Qt 将使用桌面 OpenGL(而不是 OpenGL ES)来绘制所有的窗口和控件。AA_UseOpenGLES
: 如果设置为 true,Qt 将使用 OpenGL ES(而不是桌面 OpenGL)来绘制所有的窗口和控件。AA_UseSoftwareOpenGL
: 如果设置为 true,Qt 将使用软件实现的 OpenGL(而不是硬件加速的 OpenGL)来绘制所有的窗口和控件。AA_ShareOpenGLContexts
: 如果设置为 true,Qt 将尽可能共享 OpenGL 上下文,以减少系统资源的使用。AA_SetPalette
: 如果设置为 true,Qt 将使用QApplication::palette()
返回的调色板来绘制所有的窗口和控件,而不是使用本地的颜色。AA_UseStyleSheetPropagationInWidgetStyles
: 如果设置为 true,Qt 将使用样式表来改变控件的外观,而不是使用本地的样式。AA_DontUseNativeDialogs
: 如果设置为 true,Qt 将不使用本地的对话框,而是使用 Qt 的自定义实现。AA_SynthesizeMouseForUnhandledTabletEvents
: 如果设置为 true,Qt 将为未处理的平板电脑事件生成鼠标事件。AA_CompressHighFrequencyEvents
: 如果设置为 true,Qt 将压缩高频率的事件,如鼠标移动事件,以减少系统资源的使用。AA_DontCheckOpenGLContextThreadAffinity
: 如果设置为 true,Qt 将不检查 OpenGL 上下文的线程亲和性,这可能会影响多线程的 OpenGL 渲染。AA_DisableShaderDiskCache
: 如果设置为 true,Qt 将不使用磁盘缓存来存储编译后的着色器,这可能会影响 OpenGL 的性能。AA_DontShowShortcutsInContextMenus
: 如果设置为 true,上下文菜单中的快捷键将不会显示。AA_CompressTabletEvents
: 如果设置为 true,Qt 将压缩平板电脑事件,以减少系统资源的使用。AA_DisableSessionManager
: 如果设置为 true,Qt 将不使用会话管理器,这可能会影响应用程序的启动和关闭。
这些属性可以用 QCoreApplication::setAttribute
和 QCoreApplication::testAttribute
函数来设置和查询。它们应该在创建 QApplication
对象后、显示任何窗口之前进行设置。
综合示例
以下是一个使用了一些 Qt::ApplicationAttribute
属性的示例:
#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();
}
这个示例展示了如何设置一些全局属性来改变 Qt 应用程序的行为。这些属性应该在创建 QApplication
对象后、显示任何窗口之前进行设置。请注意,这些属性并不是必须的,它们取决于你的应用程序需求。例如,如果你的应用程序不需要特定的字体或样式,或者你的应用程序不需要在高 DPI 屏幕上看起来清晰,那么你可以省略相应的设置。
# <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)