Qt::ApplicationAttribute各枚举值含义

Qt High DPI解决方案 1.不完美的方案 使用Qt:AA_EnableHighDpiScaling。100%和125%程序没缩放,150%程序会变大两倍,不符合预期。 使用PROCESS_DPI_UNAWARE。程序确实按照DPI缩放了,但是画面变模糊了。 2.完美的方案 一个完美的方案,必须是程序的尺寸能和DPI对应上,而且画面不模糊。 2.1 注意点 如果你的程序是结合OpenGL程序的,你需要小心,如果OpenGL是在Qt程序里面写的话,可能不会有太大的问题,但是如果OpenGL功能是由别人提供的,像自己封装成一个库,那 阅读详情

Qt::ApplicationAttribute 是指程序级别属性,设置应用程序级属性,即设置后,该QApplication、QCoreApplication、QGuiApplication代表的整个进程下的所有属性都被改变。Qt中还有Qt::WidgetAttribute属性,其仅仅对指定的QWidget窗体属性改变。关于Qt::WidgetAttribute枚举的含义,请参考

《Qt::WindowType、Qt::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
  确保所有控件均视为native window 。关于什么是native window窗体,请参考

      《QWidget的parentWidget、window、nativeParentWidget区别与理解》文章。
Qt::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.youkuaiyun.com/hitzsf/article/details/113617050

Qt::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
  应用程序不接受的所有鼠标事件将转换为触摸事件。没有做过触摸屏,也没办法测试。

Qt::AA_SynthesizeMouseForUnhandledTouchEvents = 12
  应用程序不接受的所有触摸事件将转换为鼠标左键事件。默认情况下,此属性处于启用状态。没有做过触摸屏,也没办法测试。
  https://blog.youkuaiyun.com/nicai_xiaoqinxi/article/details/102673560

Qt::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顺序无关。

Qt::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.youkuaiyun.com/questions/1585299

Qt::AA_DisableSessionManager = 31
  5.14新增的,没试过。禁用QSessionManager。

Qt::AA_DisableNativeVirtualKeyboard = 9
  5.15新增的,没试过。设置此属性后,当文本输入小部件在没有物理键盘的系统上获得焦点时,本机屏幕虚拟键盘将不会自动显示。
 


原文链接:https://blog.youkuaiyun.com/a15005784320/article/details/114155629

Qt 问题记录 [单指触摸默认转换鼠标事件] 问题描述 在重载QWidget控件的event()函数处理触摸屏操作时,发现单指触摸事件会被默认转换成鼠标事件,导致程序接收了QEvent::TouchBegin事件后无法继续接收后续的QEvent::TouchUpdate、 QEvent::TouchEnd事件。 查看Qt文档后发现Qt的事件处理中有以上两种属性可以控制触摸屏与鼠标事件的默认关系转换。根据Qt::AA_SynthesizeMouseForUnhandledTouchEvents属性的描述,由于应用程序不接受的所有触摸事件会自动转换成鼠标 阅读详情

相关推荐

Qt创建COM组件解决opengl渲染设置问题(DLL方式)

解决问题:采用DLL方式注册COM组件,没法自己写main函数,解决无法设置Qt全局属性问题。比如: QCoreApplication::setAttribute(Qt::AA_UseOpenGLES); 因为这些设置必须在 QApplication 之前设置才有效。

1825

【Qt 全局属性相关】 Qt 应用程序行为的全局属性 Qt::ApplicationAttribute枚举解析

Qt::ApplicationAttribute 定义了一些可以用来改变 Qt 应用程序行为的全局属性

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 977

DDR4内存PCB设计实战:8层板Fly-by拓扑信号完整性优化

本文深入探讨了DDR4内存条在8层PCB板上采用Fly-by拓扑时的信号完整性优化实战。文章详细解析了层叠规划、阻抗控制、电源分割、等长布线及串扰抑制等关键设计要点,并强调了仿真验证的重要性,为硬件工程师提供了从理论到实践的完整设计指南与自查清单。

weixin_29296241的博客 340

报错Attribute Qt::AA_EnableHighDpiScaling must be set before QCoreApplication is created.

一、问题描述: Attribute Qt::AA_EnableHighDpiScaling must be set before QCoreApplication is created. Attribute Qt::AA_EnableHighDpiScaling must be set before QCoreApplication is created. 二、解决步骤 1. 卸载低版本 卸载低版本Matplotlib 2. 安装最新版本 安装最新版本的Matplotlib 问题解决 ...

FoolishL的博客 6534

从零到飞:在Ubuntu 22.04上为你的无人机搭建PX4-Autopilot开发环境

本文详细指导在Ubuntu 22.04上搭建PX4-Autopilot开发环境,涵盖系统依赖安装、源码获取、编译目标选择及Gazebo仿真测试。通过优化构建过程和调试技巧,帮助开发者快速为无人机部署稳定的飞控系统,实现从仿真到实机的平滑过渡。

weixin_26878995的博客 489

避开这些坑,你的Python爬虫才能稳定爬取IEEE Xplore(含反爬策略与MongoDB存储实战)

本文详细介绍了如何构建稳定的Python爬虫系统以爬取IEEE Xplore学术论文,包括反爬策略、MongoDB存储优化和断点续传机制。通过动态等待时间算法、请求头指纹管理和会话保持策略,有效应对IEEE的反爬机制。同时,优化MongoDB数据结构和索引,提升存储效率。最后,强调法律合规与伦理考量,确保爬虫合法合规运行。

weixin_29031057的博客 1096

Qt enum ApplicationAttribute枚举值浅解

在Qt中,是类定义的一组枚举值,用于控制应用程序的全局行为。这些属性通常在应用程序初始化阶段(如main()函数中)通过设置,影响后续创建的或其他组件的行为。以下是。

jongden的专栏 1168

Python+QMT量化交易实战:从零搭建你的第一个极速策略(附完整代码)

本文提供了一份详细的Python+QMT量化交易实战指南,手把手教你从零搭建一个可回测、可实盘的极速策略。内容涵盖环境配置、QMT核心机制解析、双均线策略的完整代码实现、回测优化方法以及实盘部署要点,帮助量化交易新手快速入门并掌握核心开发流程。

b9c0d的博客 1014

Qt ApplicationAttribute 枚举详细解析

是 Qt 应用的“全局配置中心”,覆盖渲染、高DPI、平台适配、事件处理等核心底层逻辑。高DPI适配相关属性():跨平台应用必备;OpenGL 渲染属性():3D/图形应用关键配置;平台专属属性:通过条件编译实现跨平台兼容;设置时机和冲突规避:避免因配置错误导致应用异常。合理使用该枚举可大幅提升应用的跨平台兼容性、性能和用户体验,是 Qt 高级开发的核心知识点之一。

个人主页 430

PX4从放弃到精通(十九):串口驱动

文章目录前言一、创建进程二、编写驱动 前言 硬件: PIXHAWK4 USB转串口模块 软件: Ubuntu18.04 PX4 1.11.3固件 QGC地面站 串口助手 一、创建进程 参考:https://mbot1.blog.youkuaiyun.com/article/details/122587617 二、编写驱动 .........

超维空间科技的博客 4598

利用 HTML5 与 SICF 打造 CRM WebClient UI 多附件上传 —— 从原型到生产的全流程揭秘

通过HTML5 标准 + SICF 服务 + BOL/GOS API的三位一体方案,我们无需修改 SAP 标准代码,就能让 CRM WebClient UI 获得现代化的多附件上传体验。浏览器负责多选与进度提示,SICF 负责安全中转,ABAP 负责权限校验与落库。你可以先在质量系统快速原型,再逐步完善权限、异常处理与 UI 细节。按照本文的方法落地,哪怕一次上传几百份文件,也能轻松搞定,真正把时间还给业务。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 335

NodeGui 中的 ApplicationAttribute 枚举详解:从 Qt 应用级属性到 Node.js 桌面应用实践

`ApplicationAttribute` 是 NodeGui 中用于控制整个桌面应用运行时行为的一组应用级属性枚举,对应 Qt 中的 `Qt::ApplicationAttribute`。本文以 [ApplicationAttribute 枚举文档](https://link.gitcode.com/i/0db3976be529cb06ee6c5d687364dd18) 为主线,逐项拆解该枚举

gitblog_01107的博客 139

C#实现Socket通信同时监听多客户端(附完整源码)

C#实现Socket通信同时监听多客户端(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 427

KOReader 从零跑通:三步搭建完整的多格式电子书阅读环境

晚上十点,你把手里的扫描版 PDF 丢进电纸书自带阅读器,字像被水泥糊住,行距动不了。KOReader 是一款开源电子书阅读器,能打开 PDF、DjVu、EPUB、FB2 等格式,还能自由调对比度和字体。跟着这篇文章走一遍,从源码编译到翻开第一页。 [![KOReader 电子书阅读器触控分区示意图](https://raw.gitcode.com/GitHub_Trending/ko/kore

gitblog_00996的博客 676

infercnv的实操

摘要: 博主在infercnv分析中遇到执行困难,外包服务不可靠(未按要求使用HMM方法)。通过优化策略(逐样本处理、精简细胞至1000个、固定随机种子)解决了运行问题,但HMM功能仍无法实现。最终参考Cell期刊标准设置阈值完成分析,后续将继续更新进展。该案例凸显了生物信息分析中自主优化的重要性。(150字)

xiaoyusang的博客 308

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

NodeGui 中 ConnectionType 枚举深度解析:Qt 信号连接类型在 Node.js 桌面应用中的实践指南

NodeGui 以 Qt 为底层引擎,把 Qt 的控件、信号与事件系统完整映射到 Node.js。`ConnectionType` 正是从 [Qt 枚举 `Qt::ConnectionType`](https://link.gitcode.com/i/4c9daccdee540dc86b53764496a5c2ff) 平移而来的核心枚举,它定义了信号与槽(signal-slot)之间的连接语义——

gitblog_01111的博客 367

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

NodeGui 中 FillRule 枚举详解:OddEvenFill 与 WindingFill 填充规则的实战应用

本文深入解析 NodeGui(基于 Qt 与 Node.js 的跨平台原生桌面应用框架)中 `FillRule` 枚举的完整语义与用法。`FillRule` 对应 Qt 中 `Qt::FillRule` 枚举,用于决定 QPainterPath 这类自相交或嵌套路径的哪些区域应被填充,是进行复杂图形绘制的关键开关。读完本文,你将掌握两个枚举值的数学判定原理、在 QPainterPath 上的读写方

gitblog_01133的博客 748

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

解决QGroundControl Windows 环境下控件花屏,闪烁Bug

是Qt枚举类型Qt::ApplicationAttribute中的一个成员,它表示应用程序将使用软件渲染的OpenGL,而不是硬件加速的OpenGL。在Windows系统下,需要在某些情况下禁用硬件加速,或者当使用特定的图形引擎或驱动程序时,可能会需要使用软件渲染。这个方法调用设置应用程序属性,告诉Qt应用使用软件OpenGL渲染,而不是硬件加速的OpenGL。通常情况下,这个调用用于处理一些特定的兼容性问题,或者解决特定硬件或驱动问题。

小鳄鱼 688

Qt::WindowType、Qt::WidgetAttribute各个标志含义汇总

Qt::WindowType标志通过如下函数设置: setWindowFlag 或 setWindowFlags 汇总如下: Qt::Widget: 这个很简单,如果创建时,没有父,则自己成为一个独立的窗体,此时该窗体有标题栏;如果有父,则作为子窗体嵌入到父中,嵌入到父时,标题栏都不会存在了。 ......

danshiming的博客 5393

【Qt UI相关】Qt5和Qt6中关于高DPI缩放属性

在Qt 5中,高DPI缩放默认是禁用的,你可以通过设置Qt::AA_EnableHighDpiScaling应用程序属性来启用它。然而,在Qt 6中,高DPI缩放默认是启用的,你不能禁用它,但你可以调整它的行为。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 6156

QCoreApplication类各函数功能说明(获取应用程序路径、获取上一级目录)

QT获取当前目录的上一级目录dir->cdUp() QDir *dir = new QDir(QDir::currentPath());//D:/Project/Core dir->cdUp(); dir->path()//D:/Project /********************************* 1,构造函数,创建一个非gui事件循环 QCoreApplication(int &, char **) 2,析构函数 ~QCoreApplication() 3, A.

u011555996的博客 2636

Qt知识点 —— Qt的Attributes

9. Qt::AA_ShareOpenGLContexts:在支持OpenGL渲染的Qt应用中,设置此属性意味着在同一进程内的多个窗口之间共享OpenGL上下文,以提高性能和资源利用率。8. Qt::AA_SetPalette:这个属性并不直接对应于Qt中的一个具体应用属性,但从概念上讲,它可能是指通过调用QApplication::setPalette()来全局设置应用程序的默认调色板的行为。在早期版本的Qt中,调色板对于定制控件外观非常重要,但在现代Qt版本中,使用样式表(QSS)更为常见。

qq_45329237的博客 1782

QT 触控事件和鼠标事件的分离(问题已解决)

QT 多点触控问题总结(一)

weixin_43301015的博客 3496

Qt ApplicationAttribute/WidgetAttribute 程序级别属性

   Qt 不是开发语言,没有所谓的谁厉害。对于Qt本身来说老鸟跟新手区别只是谁遇到的问题更多。当然衡量Qter的水平主要还是看c++的水平。 Qt ApplicationAttribute/WidgetAttribute 程序级别属性   今天测试时候换了一批新的电脑。linux/mac都正常,就win下显示有些问题。检查后发现,新装的win系统总是默认缩放150%,高清屏显示也是自带200%缩放。这个缩放会造成显示的一些问题。 QApplication::setAttribute(Qt::AA

Beyond欣 5459

AA_EnableHighDpiScaling

QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling)

liuying263的专栏 2470

Qt 图形驱动策略说明

【代码】Qt 图形驱动策略说明。

sbkebcmj的博客 1878
上一篇: QWebEngineView崩溃及替代方案
下一篇: addStretch、setStretchFactor用法
荆楚闲人
博客等级 码龄20年 3万+粉丝 473原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值