Qt ApplicationAttribute/WidgetAttribute 程序级别属性
Qt 不是开发语言,没有所谓的谁厉害。对于Qt本身来说老鸟跟新手区别只是谁遇到的问题更多。当然衡量Qter的水平主要还是看c++的水平。
Qt ApplicationAttribute/WidgetAttribute 程序级别属性
今天测试时候换了一批新的电脑。linux/mac都正常,就win下显示有些问题。检查后发现,新装的win系统总是默认缩放150%,高清屏显示也是自带200%缩放。这个缩放会造成显示的一些问题。
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
同样150%缩放模式时:使用和不使用的区别。
Qt已经封装好了很多的Attribute。分别针对本窗口(WidgetAttribute)和全局窗口(ApplicationAttribute),比如上边提到的支持高清屏。各种Attribute各项属性是如何实现的,除非特别感兴趣,否则估计很少去深入研究。还是实战一点知道有这么个东西,可以查找比较靠谱。
官网说明再这里 https://doc.qt.io/qt-6/qt.html#details。
enum Qt::ApplicationAttribute 指定应用程序范围功能的行为的属性。
相关函数有两个setAttribute
用来设置属性,testAttribute
用来读取是否设置。
// class QCoreApplication
static void setAttribute(Qt::ApplicationAttribute attribute, bool on = true);
static bool testAttribute(Qt::ApplicationAttribute attribute);
属性(qt-6的doc):
不同版本 Attribute 会有新增和弃用。有空简单试一遍当前版本Attribute的作用,再遇到类似问题知道解决办法。qt6文档里去掉了很多Attribute比如AA_EnableHighDpiScaling。是因为直接支持了吗?打算6.2出来后再去研究Qt6。
Qt::AA_DontShowIconsInMenus = 2
下拉菜单是否显示最左侧的图标,默认显示,开启后则不显示。Qt::AA_DontShowShortcutsInContextMenus = 28
下拉菜单是否显快捷键提示,默认显示,开启后则不显示。Qt::AA_NativeWindows = 3
所有控件均视为window,所有widget对角点均变成屏幕左上角和现在看到的右下角(会有大量不可见的空白),严重影像刷新效率。而且原来的自定义窗口,拖拽等等均因为起点的改变全部失效。
https://blog.csdn.net/u011352234/article/details/53838452Qt::AA_DontCreateNativeWidgetSiblings = 4
这个要跟Qt::WA_NativeWindow(Qt::WidgetAttribute)配合起来使用,测试到Qt::WA_NativeWindow时再详细说明。大致就是给一个Widget设置了Qt::WA_NativeWindow后Widget的同级(它parent的其他children)保持原状。Qt::AA_PluginApplication = AA_MacPluginApplication = 5
指示Qt用于编写插件。关闭一些无用的属性,只对Mac有效。实际关闭那些没去看具体怎么实现的。Qt::AA_DontUseNativeMenuBar = 6
指定菜单栏是否应在支持它的平台上用作本机菜单栏(mac和linux)。win设置此属性无效。设置之后顶部菜单栏将使用系统自带的。
https://blog.csdn.net/hitzsf/article/details/113617050Qt::AA_MacDontSwapCtrlAndMeta = 7
Mac的设置没有去测试 。
https://www.kancloud.cn/apachecn/pyqt4-doc-zh/1947160 : 在Mac OS X在默认情况下, Qt的交换控制和Meta (命令)键(即,当控制被按下时, Qt的发送梅塔,每当元被按下控制被发送) 。当此属性为True, Qt会不会做翻转。 QKeySequence.StandardShortcuts也将相应地翻动(即,QKeySequence.Copy将命令+ C在键盘上,无论设置的值,虽然什么是输出QKeySequence.toString (QKeySequence.PortableText)会有所不同) 。Qt::AA_Use96Dpi = 8
假设屏幕的分辨率为96 DPI,而不是使用操作系统提供的分辨率。不管那个屏幕,字体实际渲染出来的大小一致。实测开启这个后窗口内的文字大小不随系统缩放改变而改变。Qt::AA_SynthesizeTouchForUnhandledMouseEvents = 11
应用程序不接受的所有鼠标事件将转换为触摸事件。没有做过触摸屏,也没办法测试。
https://blog.csdn.net/nicai_xiaoqinxi/article/details/102673560Qt::AA_SynthesizeMouseForUnhandledTouchEvents = 12
应用程序不接受的所有触摸事件将转换为鼠标左键事件。默认情况下,此属性处于启用状态。没有做过触摸屏,也没办法测试。
https://blog.csdn.net/nicai_xiaoqinxi/article/details/102673560Qt::AA_ForceRasterWidgets = 14
使顶级小部件使用纯光栅曲面,并且不支持非本机基于GL的子小部件。测试了下开启后如果程序用到 glwidget会显示一片空白,如果没用到则正常。Qt::AA_UseDesktopOpenGL = 15
强制使用桌面OpenGL。Qt::AA_UseOpenGLES = 16
在使用动态加载OpenGL实现的平台上强制使用OpenGL ES 2.0或更高版本。Qt::AA_UseSoftwareOpenGL = 17
强制在使用动态加载OpenGL实现的平台上使用基于软件的OpenGL实现。Qt::AA_ShareOpenGLContexts = 18
这允许在属于不同顶级窗口的QOpenGLWidget实例之间共享OpenGL资源。默认开启
性能排名 DesktopOpenGL > OpenGLES > Soft。默认情况下使用DesktopOpenGL。
OpenGLES和Soft一般只有在虚拟机上用(渲染效率慢,也会增加开销)。这个也解决了我之前遇到的一个bug,就是vtk写的程序,在虚拟机上测试各种黑屏。因为虚拟机没有DesktopOpenGL,只有SoftOpenGL。需要改了后才能再虚拟机上测试(打包前记得取消)。
https://www.cnblogs.com/slcode/p/e745b120173372ffb74582d6de78f0d2.html
- Qt::AA_SetPalette = 19
qDebug() << QGuiApplication::testAttribute(Qt::AA_SetPalette);
判断有没有设置过Palette
,默认是false,qApp->palette()
会返回系统主题。
如果设置过qApp->setPalette(const QPalette &);
则 testAttribute(Qt::AA_SetPalette)
会返回真,qApp->palette()
会返回设置的主题。
Qt::AA_UseStyleSheetPropagationInWidgetStyles = 22
这个就是关于样式表的继承问题,默认情况下一个控件的样式表是使用最后一次的setStyleSheet
,如果开启这个设置,每个控件会找父子关系最近的样式表跟setStyleSheet
顺序无关。
https://blog.csdn.net/weixin_30878361/article/details/101329858Qt::AA_DontUseNativeDialogs = 23
系统有内置对话框(比如打开文件),Qt
也自己实现了所平台的系统对话框(如果不自己改的话贼丑)。默认情况下使用系统对话框,当找不到系统对话框时(比如打包时系统版本不一样、调了第三方测窗口句柄)会调内置对话框。如果设置了AA_DontUseNativeDialogs
后,所有对话框会直接用Qt
内置的。Qt::AA_SynthesizeMouseForUnhandledTabletEvents = 24
应用程序不接受的所有平板电脑事件将转换为鼠标事件。没有做过触摸屏,也没办法测试。Qt::AA_CompressHighFrequencyEvents = 25
只对触摸屏有效,没有用过。每次传入一批操作而不是一个操作。Qt::AA_CompressTabletEvents = 29
只对触摸屏有效,没有用过。看说明大概是AA_CompressHighFrequencyEvents每次发送一批操作,AA_CompressTabletEvents允许每次接受一批操作。Qt::AA_DontCheckOpenGLContextThreadAffinity = 26
还没用过QOpenGLContext。Qt::AA_DisableShaderDiskCache = 27
禁用磁盘上着色器程序二进制文件的缓存。默认情况下,Qt Quick、QPainter的OpenGL后端以及使用QOpenGLShaderProgram及其addCacheableShaderFromSource重载之一的任何应用程序都将在支持glProgramBinary()的系统上的共享或每进程缓存存储位置使用基于磁盘的程序二进制缓存。
目前还没遇到过这种情况。
https://ask.csdn.net/questions/1585299Qt::AA_DisableSessionManager = 31
5.14新增的,没试过。禁用QSessionManager。Qt::AA_DisableNativeVirtualKeyboard = 9
5.15新增的,没试过。设置此属性后,当文本输入小部件在没有物理键盘的系统上获得焦点时,本机屏幕虚拟键盘将不会自动显示。
enum Qt::WidgetAttribute 指定Widget属性。
void setAttribute(Qt::WidgetAttribute, bool on = true);inline bool testAttribute(Qt::WidgetAttribute) const;
相关函数有两个setAttribute
用来设置属性,testAttribute
用来读取是否设置。
这个有100多个,没事时候看几个,慢慢完善
- Qt::WA_AcceptDrops = 78
- Qt::WA_AlwaysShowToolTips = 84
- Qt::WA_CustomWhatsThis = 47
- Qt::WA_DeleteOnClose = 55
- Qt::WA_Disabled = 0
- Qt::WA_DontShowOnScreen = 103
- Qt::WA_ForceDisabled = 32
- Qt::WA_ForceUpdatesDisabled = 59
- Qt::WA_Hover = 74
- Qt::WA_InputMethodEnabled = 14
- Qt::WA_KeyboardFocusChange = 77
- Qt::WA_KeyCompression = 33
- Qt::WA_LayoutOnEntireRect = 48
- Qt::WA_LayoutUsesWidgetRect = 92
- Qt::WA_MacOpaqueSizeGrip = 85
- Qt::WA_MacShowFocusRect = 88
- Qt::WA_MacNormalSize = 89
- Qt::WA_MacSmallSize = 90
- Qt::WA_MacMiniSize = 91
- Qt::WA_Mapped = 11
- Qt::WA_MouseNoMask = 71
- Qt::WA_MouseTracking = 2
- Qt::WA_Moved = 43
- Qt::WA_NoChildEventsForParent = 58
- Qt::WA_NoChildEventsFromChildren = 39
- Qt::WA_NoMouseReplay = 54
- Qt::WA_NoMousePropagation = 73
- Qt::WA_TransparentForMouseEvents = 51
- Qt::WA_NoSystemBackground = 9
- Qt::WA_OpaquePaintEvent = 4
- Qt::WA_OutsideWSRange = 49
- Qt::WA_PaintOnScreen = 8
- Qt::WA_PaintUnclipped = 52
- Qt::WA_PendingMoveEvent = 34
- Qt::WA_PendingResizeEvent = 35
- Qt::WA_QuitOnClose = 76
- Qt::WA_Resized = 42
- Qt::WA_RightToLeft = 56
- Qt::WA_SetCursor = 38
- Qt::WA_SetFont = 37
- Qt::WA_SetPalette = 36
- Qt::WA_SetStyle = 86
- Qt::WA_ShowModal = 70
- Qt::WA_StaticContents = 5
- Qt::WA_StyleSheet = 97
- Qt::WA_StyleSheetTarget = 131
- Qt::WA_TabletTracking = 129
- Qt::WA_TranslucentBackground = 120
- Qt::WA_UnderMouse = 1
- Qt::WA_WindowModified = 41
- Qt::WA_WindowPropagation = 80
- Qt::WA_MacAlwaysShowToolWindow = 96
- Qt::WA_SetLocale = 87
- Qt::WA_StyledBackground = 93
- Qt::WA_ShowWithoutActivating = 98
- Qt::WA_NativeWindow = 100
- Qt::WA_DontCreateNativeAncestors = 101
- Qt::WA_X11NetWmWindowTypeDesktop = 104
- Qt::WA_X11NetWmWindowTypeDock = 105
- Qt::WA_X11NetWmWindowTypeToolBar = 106
- Qt::WA_X11NetWmWindowTypeMenu = 107
- Qt::WA_X11NetWmWindowTypeUtility = 108
- Qt::WA_X11NetWmWindowTypeSplash = 109
- Qt::WA_X11NetWmWindowTypeDialog = 110
- Qt::WA_X11NetWmWindowTypeDropDownMenu = 111
- Qt::WA_X11NetWmWindowTypePopupMenu = 112
- Qt::WA_X11NetWmWindowTypeToolTip = 113
- Qt::WA_X11NetWmWindowTypeNotification = 114
- Qt::WA_X11NetWmWindowTypeCombo = 115
- Qt::WA_X11NetWmWindowTypeDND = 116
- Qt::WA_AcceptTouchEvents = 121
- Qt::WA_TouchPadAcceptSingleTouchEvents = 123
- Qt::WA_X11DoNotAcceptFocus = 126
- Qt::WA_AlwaysStackOnTop = 128
- Qt::WA_ContentsMarginsRespectsSafeArea = 130
Qt ApplicationAttribute/WidgetAttribute 程序级别属性相关推荐
- 在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的。如果在 IIS 中没有将虚拟目录配置为应用程序,则可能导致此错误。...
调试ASP.NET程序时发生错误:在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的.如果在 IIS 中没有将虚拟目录配置为应用程 ...
- Qt将应用程序部署到Android设备
Qt将应用程序部署到Android设备 将应用程序部署到Android设备 指定软件包的设置 选择API级别 建立AAB 签署Android套件 添加外部库 编辑清单文件 包装名称 造型风格 屏幕方向 ...
- Qt Creator开发Qt快速应用程序
Qt Creator开发Qt快速应用程序 开发Qt快速应用程序 创建Qt快速项目 在设计模式下编辑QML文件 创建UI 添加动态 编辑3D场景 相关话题 浏览ISO 7000图标 将QML模块与插件一 ...
- 在应用程序级别以外使用注册为 allowDefinition='MachineToApplication' 的节是错误
在应用程序级别以外使用注册为 allowDefinition='MachineToApplication' 的节是错误 在web.config文件之外注册为 allowDefinition='Mach ...
- [转载]Qt涂鸦板程序图文详细教程..Qt涂鸦板程序图文详
原文地址:Qt涂鸦板程序图文详细教程..Qt涂鸦板程序图文详细教程..作者:棰滈櫟鍚 Technorati 标签: QT http://www.yafeilinux.com/?p=379 (说明:这是 ...
- 桌面linux imx6q,SAIL-IMX6Q添加qt桌面应用程序
添加qt桌面应用程序比较繁琐,提起来大家都是相当头疼的一块项目,经过我一系列的摸索,终于学会了用imx6添加qt桌面应用程序. 文件夹设置存放在:/usr/share/matchbox/vfolder ...
- 在应用程序级别以外使用注册为 allowDefinition='MachineToApplication' 的节是错误的解决办法
原文地址:http://www.cnblogs.com/DotNetNuke/archive/2008/09/30/1302498.html 在ASP.NET程序中,我们是可以在各个目录放置不同的we ...
- qt无法定位程序输入点解决方法
qt无法定位程序输入点解决方法 更新日期:2020-05-12 14:53:22 来源:互联网 手机扫码继续观看 很多的小伙伴在使用电脑的时候肯定都遇到过QT无法定位程序输入点与动态链接库,给正常的使 ...
- QT编译发布程序后报错如缺少dll、“应用程序无法正常启动(0xc000007b)”的可能解决方法
QT编译发布程序后报错如缺少dll."应用程序无法正常启动(0xc000007b)"的可能解决方法 参考文章: (1)QT编译发布程序后报错如缺少dll."应用程序无法正 ...
最新文章
- 在看不见的地方,AI正在7×24为你在线服务
- Trunc(dtpPurDate.DateTime)可以将时间取到天。
- C语言-什么是尾递归
- boost实用工具:assign库了解学习
- TCP/IP协议族之运输层(TCP流量控制和拥塞控制 [1])
- nodejs 代替python_Python/NodeJS坑记
- 录像带转存电脑的方法_《波西亚时光》录像带使用方法介绍
- 在JSP页面中获取当前日期时间
- Unrecognized Windows Sockets error: 10106: create 的解决
- 一个关于数论中拉格朗日定理的证明
- js的alert弹框中怎么写html,JavaScript实现alert弹框效果
- 数字孪生|成熟度评价
- 笔记本通过网线给台式机分享网络
- FedEx v20.0.7654的CData驱动程序
- 漫画程序猿惯用口头禅
- 计算机绘图要学吗,如何学好计算机绘图 AUTOCAD 软件
- 图片隐写类简单思路介绍
- Python 模拟双色球抽奖
- 现代密码学第一章复习题
- 转载(生物分析专题网站(很全、实用))
热门文章
- html背景图片定位方法
- H5+CSS+JavaScript入门学习
- 为什么更多APP开发者选择穿山甲作为游戏变现平台?
- JavaScript 数组拼接打印_JavaScript 中的“黑话”
- [Office] Excel 每行插入空白行 / 隔行插入一行/ 每列插入空白列 / 每隔两行插入一行 / 批量插入空白行
- opencv颜色识别学习总结
- windows10专业版 docker desktop 安装失败
- sqlserver中计算日期差
- Zotero快速复制文献
- 非线性优化中的KTT条件(知乎文章的理解)