Q_DECLARE_OPERATORS_FOR_FLAGS()

Qt进阶之Q_ENUM、Q_FLAG、Q_DECLARE_FLAGS、Q_DECLARE_OPERATORS_FOR_FLAGS相关宏的深度探秘与点亮高效编程之路 这个宏向元对象系统注册一个枚举类型。但是它必须放在具有Q_OBJECT或Q_GADGET宏的类的枚举声明之后。Q_OBJECTpublic:public:Q_FLAG宏向元对象系统注册一个单一的标志类型。通常在类定义中使用它来声明给定枚举的值可以用作标志,并使用位或操作符进行组合。宏必须放在枚举声明之后。标志类型的声明是使用Q_DECLARE_FLAGS()宏完成的。用法,因为是使用位操作,所以赋值不能是1、2、3、4; 阅读详情

如果尝试从另一个enum传递一个值或仅传递0以外的普通整数,则编译程序将报告一个错误。如果需要以非类型化方式将整数值强制转换为标志,则可以将显式QFlags构造程序用作强制转换操作符。

如果要为自己的enum类型使用QFlags,请使用Q_DECLARE_FLAGS()和Q_DECLARE_OPERATORS_for_FLAGS()。
示例:

class MyClass
 {
 public:
     enum Option {
         NoOptions = 0x0,
         ShowTabs = 0x1,
         ShowAll = 0x2,
         SqueezeBlank = 0x4
     };
     Q_DECLARE_FLAGS(Options, Option)
     ...
 };

Q_DECLARE_OPERATORS_FOR_FLAGS(MyClass::Options)

然后,可以使用MyClass::Options类型存储MyClass::Option值的组合。

Q_FLAG与Q_ENUM 宏Q_ENUM会向元对象系统注册一个枚举类型, 它必须放在具有Q_OBJECT或Q_GADGET宏的类中的枚举声明之后(不然放在前面编译器会报错)。Q_ENUM宏引入自Qt5.5版本,之前版本的Qt请使用Q_ENUMS宏,但Q_ENUMS宏不支持QMetaEnum::fromType()函数(这也是Q_ENUMS被弃用的原因)如果要将QFlags用于自己的枚举类型,请使用Q_DECLARE_FLAGS()和Q_DECLARE_OPERATORS_FOR_FLAGS()。此宏向元对象系统注册枚举类型。 阅读详情

相关推荐

Qt项目实战:用Q_DECLARE_FLAGS和Q_DECLARE_OPERATORS_FOR_FLAGS打造可复用的UI状态管理模块

本文详细介绍了如何利用Qt的Q_DECLARE_FLAGS和Q_DECLARE_OPERATORS_FOR_FLAGS宏构建类型安全的UI状态管理模块。通过位枚举设计和Flags模式,开发者可以优雅处理多状态组合场景,提升代码的可维护性和类型安全性。文章包含实战代码示例和高级技巧,适用于复杂GUI应用开发。

weixin_30887919的博客 351

【QT】枚举常用宏(Q_ENUM,Q_FLAG,Q_DECLARE_FLAGS,Q_DECLARE_OPERATORS_FOR_FLAGS)

1. 使用Q_ENUM之前,必须在类中先声明Q_OBJECT或Q_GADGET宏。 2. Q_ENUM(枚举类型)必须放在枚举声明之后,放在前面编译器会报错。 3. 用Q_ENUM声明的枚举,会自动注册到Qt元类型系统,可以使用静态函数QMetaEnum::fromType()来获取QMetaEnum。 4. Qt 中,模板类 QFlags 提供了类型安*的方式保存 enum 的逻辑运算结果,来解决类型不安全的问题。

瞌睡的博客 5424

Qt 枚举变量,Q_ENUM,Q_FLAG,Q_NAMESPACE,Q_ENUM_NS,Q_FLAG_NS以及其他

前言   之前做一个比较大工程,核心数据里面有很多是枚举变量,需要频繁地使用枚举量到字符串和字符串到枚举量的操作,为了实现这些操作,我把每个枚举类型后面都附加了两个类似Enum_to_String()和String_to_Enum()的函数,程序显得很臃肿。这时候就非常羡慕C#或者java等兄弟语言,内核内置了枚举量和字符串转换的方法。   最近读Qt文档时偶然间发现,Qt内核其实已经提供了这个转换机制,使得我们能用很少的代码完成枚举量和字符串的转换,甚至还能实现其他更酷更强大的功能,下面我们就来看看如何使

我不是码农的博客~~~ 1106

枚举标志集合类型

在 Qt 里,当需要使用多个枚举值的组合(也就是标志)时,就可以借助Q_DECLARE_FLAGS 宏来定义一个枚举标志集合类型。该类型能够存储多个枚举值,这在需要对对象的多种属性或者状态进行设置时非常有用,尤其常用在标志位设计的应用场景中。借助Q_DECLARE_OPERATORS_FOR_FLAGS 宏,可以让标志集合类型可以像普通的整数类型一样进行按位操作,方便开发者组合和检查标志。提示:以下是本篇文章正文内容,下面案例可供参考。

u013477370的博客 1295

QT6 源(33):枚举类的源码,不要使用类 QFlag,它是辅助重要类 QFlags 的,和宏定义 Q_DECLARE_TYPEINFO(A,B),Q_DECLARE_FLAGS(A,B)

【代码】QT6 源(33):枚举类的源码,不要使用类 QFlag,它是辅助重要类 QFlags 的,和宏定义 Q_DECLARE_TYPEINFO(A,B),Q_DECLARE_FLAGS(A,B)

zhangzhangkeji的博客 910

Android Camera Sensor HDR详解

本文详细介绍了Android相机传感器(Sensor)中实现高动态范围(HDR)采集的各种技术方式。主要内容包括: Sensor HDR技术分类 帧内HDR(Single-Frame HDR):在同一帧同一像素内完成多增益采集,无运动伪影和帧率损失,包括DAG(双模拟增益)、DCG(双转换增益)等技术 帧间HDR(Multi-Frame HDR):通过多帧曝光实现,如DOL(数字重叠)、Staggered HDR等 混合HDR:结合多种技术的复合方案 详细技术原理 重点解析了DAG和DCG两种主流帧内HDR

DU_YULIN的博客 361

QFlags详解

一、描述 QFlags<Enum>类是一个模板类,其中Enum是枚举类型。QFlags在Qt中用于存储枚举值的组合。 用于存储或组合枚举值的传统C++方法是使用整型变量。这种方法的不便之处在于根本没有类型检查,任何枚举值都可以与任何其他枚举值进行逻辑运算。 enum Orientation { Up = 1, Down = 2, Left = 4, Right = 8, }; enum Di

友善啊,朋友的博客 3471

无感无刷电机控制进阶:反电动势过零检测的5种实现方案对比

本文深入探讨无感无刷电机控制中反电动势过零检测的5种实现方案,包括电阻分压虚拟中性点法、专用BEMF检测IC方案、基于ADC采样的数字锁相环、无传感器观测器技术及混合方案创新实践。通过对比分析各方案的优劣及适用场景,为电机控制工程师提供实用的技术选型指南,助力提升系统性能与成本效益。

weixin_28691741的博客 845

QFlags的使用

QFlags的使用 //------------------testclass.h------------------// #ifndef TESTCLASS_H #define TESTCLASS_H #include <QFlags> #define Q_DECLARE_FLAGS(Flags, Enum)\ typedef QFlags<Enum> Flags;...

欢乐的企鹅博客 744

Python实战:用Realsense D435和睿尔曼机械臂完成手眼标定的5个关键步骤

本文详细介绍了使用Python、Realsense D435深度相机与睿尔曼机械臂进行手眼标定的完整实战流程。文章将过程拆解为环境搭建、数据采集、核心计算、结果验证和精度优化五个关键步骤,重点剖析了数据采集的黄金法则、常见错误排查以及如何将标定结果集成到视觉抓取程序中,旨在帮助开发者实现毫米级精度的视觉引导机器人系统。

weixin_29103191的博客 321

避坑指南:GROMACS模拟中.tpr、.xtc、.edr、.cpt文件你用对了吗?从生成到分析全流程解析

本文详细解析GROMACS分子动力学模拟中.tpr、.xtc、.edr、.cpt等核心文件的使用技巧,从文件生成到轨迹优化、能量分析的全流程避坑指南。重点介绍拓扑文件校验、轨迹格式选择、周期性边界处理等实战经验,帮助科研人员高效管理模拟数据并准确提取关键能量信息。

weixin_30631587的博客 118

QT6(21)3.4其他常用基础类:QVariant,QFlags,完善自定义枚举类型要借助于宏Q_DECLARE_FLAGS(a,b)、Q_DECLARE_OPERATORS_FOR_FLAGS()

(66)(67)

zhangzhangkeji的博客 175

MZI and MI Optical Waveguide(马赫曾德与迈克尔逊光波导)

注意,这里的 “镜子” 并不是真的在波导中做一个镜子出来,而是通过使用一个 1x2 的 MMI 结构将 MMI 输出的两个端口连接起来形成一个 “宽带镜子”。对于这里形成镜子的详细原理,后面有时间了我们再做更加详细地介绍。,它由一个 splitter 构成和两个仿佛带有 “镜子” 的臂组成。相比较于 MZI,光波可以在它的臂中传输,最终从进光口处出去得到相长或者相消干涉,很明显,在。)的折射率,从而使得两个臂上产生的相位差值不同,最终得到相长或者相消干涉的结果。这里,给大家介绍一下。,它更像是一个折叠的。

u011699626的博客 2454

Q_ENUM Q_DECLARE_FLAGS Q_FLAG 自定义枚举

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT pu...

zhanghw的博客 1616

多模态脑区细分图谱 HCP-MMP v1.0, Glasser et al. 2016 皮层和皮下区域,简写和全称对应关系

人类连接组计划多模态脑区细分图谱(HCP-MMP)提供了对人类大脑皮层区域的非常有用的细分(Glasser et al. 2016a, b)。图谱是多模态的,因为每个区域都是根据四个标准的组合定义的,包括结构(T1加权/T2加权髓鞘含量和皮层厚度图)、静息态功能连接、基于任务的激活和拓扑地形组织。HCP-MMP v1.0图谱包含每个半球180个皮层区域,基于210名参与者的分析。

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 2622

把 ABAP 经验装进 GitHub Copilot 的按需大脑,Agent Skills 如何改变 ABAP 开发

2026 年 8 月,SAP Community 上出现了一次很有代表性的 ABAP 实验。开发者把标准 Flight Model 里的复制成自己的测试类,删除原有 ABAP Unit Test,再让 GitHub Copilot Agent 为方法重新生成测试代码。真正有意思的地方并不是 Copilot 会不会写,而是开发者给 Copilot 准备了两个专门的 Agent Skills,一个负责 ABAP Unit Test 的通用规则,一个负责 ABAP Test Double Framework。

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

【QT】枚举与标志宏实战:从Q_ENUM到Q_FLAG的进阶应用

本文深入探讨了QT中枚举与标志宏的进阶应用,从Q_ENUM的基础使用到Q_FLAG的高级功能,详细介绍了Q_DECLARE_FLAGS和Q_DECLARE_OPERATORS_FOR_FLAGS的实际应用。通过实战案例,展示了如何利用这些宏实现类型安全的枚举和标志位操作,提升代码可读性和维护性,特别适用于需要复杂状态管理的QT项目开发。

weixin_33682790的博客 523

基于传感器数据实现火灾报警预测分析

火警 系统当检测到烟雾、火灾、一氧化碳或其他与火灾有关或一般通知的紧急情况时,向人们发出警告

DT程序员的博客 723

QT笔记——QMetaEnum类

Q_ENUM,Q_FLAG,Q_DECLARE_OPERATORS_FOR_FLAGS,Q_DECLARE_FLAGS 宏的学习

lion_cxq的博客 2311

jre9下载 jdk9

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

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

QT之QFlags详解

QFlags是一个模板类,其中Enum是枚举类型,QFlags用于定义枚举值的或运算组合,在Qt中经常用到 QFlags 类。alignment属性值是Qt:Alignment类型Qt帮助文档中显示的Qt::Alignment信息有如下表示enum Qt::AlignmentFlag //枚举类型flags Qt::Alignment //标志类型第一行代码翻译一下就是Qt命名空间下的有一个变量名字叫做AlignmentFlag他是枚举类型。

weixin_73303171的博客 1843

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Qt:Qt中的枚举变量,Q_ENUM,Q_FLAG,Q_NAMESPACE,Q_ENUM_NS,Q_FLAG_NS以及其他

之前做一个比较大工程,核心数据里面有很多是枚举变量,需要频繁地使用枚举量到字符串和字符串到枚举量的操作,为了实现这些操作,我把每个枚举类型后面都附加了两个类似Enum_to_String()和String_to_Enum()的函数,程序显得很臃肿。这时候就非常羡慕C#或者java等兄弟语言,内核内置了枚举量和字符串转换的方法。 最近读Qt文档时偶然间发现,Qt内核其实已经提供了这个转换机制,使得我们能用很少的代码完成枚举量和字符串的转换,甚至还能实现其他更酷更强大的功能,下面我们就来看看如何使用Qt的这个功

OceanStar的博客 1651

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Qt元对象系统:Q_ENUM与Q_FLAG宏的进阶应用与最佳实践

在C++编程中,枚举(enum)和标志位(Flags)是处理状态和选项的常用方式,但其原生支持在字符串转换、类型安全及框架集成方面存在局限。Qt元对象系统通过运行时反射机制,为C++类型提供了强大的元信息查询与操作能力。Q_ENUM和Q_FLAG等宏正是连接静态C++枚举与动态Qt生态的关键桥梁,它们将枚举注册到元对象系统,实现字符串与枚举值的双向转换、类型安全的位运算以及无缝的信号槽传递。这项技术极大地提升了代码的可维护性和框架集成度,特别适用于需要动态配置、UI属性绑定或跨模块通信的场景。本文聚焦于Q_

weixin_32496547的博客 224

Qt中的枚举变量,Q_ENUM,Q_FLAG,Q_NAMESPACE,Q_ENUM_NS,Q_FLAG_NS以及其他

Qt中的枚举变量,Q_ENUM,Q_FLAG,Q_NAMESPACE,Q_ENUM_NS,Q_FLAG_NS以及其他 前言 Q_ENUM的使用 Q_FLAG的引入解决什么问题? Q_NAMESPACE,Q_ENUM_NS和Q_FLAG_NS 新旧对比 结语 前言 之前做一个比较大工程,核心数据里面有很多是枚举变量,需要频繁地使用枚举量到字符串和字符串到枚举量的操作,为了实现这些操作,我把每个枚举类型后面都附加了两个类似Enum_to_String()和String_to_Enum()的函数,程序

danshiming的博客 2486

使枚举值支持|(与)运算符 保存多个值

①Q_DECLARE_FLAGS将自动创建一个QFlags类的实例,将支持QFlags的函数如setFlag。②Q_DECLARE_OPERATORS_FOR_FLAGS里面对'|'符号进行了重载,使枚举支持'|'符号。记录一下,以备以后查阅。

edge0的博客 314

Qt中的测试 枚举与 QFlags详解

传统的 C++ 编程中,通常使用整数来保存 enum 的逻辑运算结果 (与、或、非、异或等),在进行逻辑运算的时候没有进行类型检查,一个枚举类型可以和其他的枚举类型进行逻辑运算,运算的结果可以直接传递给接收参数为整数的函数。 Qt 中,模板类QFlags<Enum>提供了类型安全的方式保存 enum 的逻辑运算结果解决上面的这几个问题,这种方式在 Qt 里很常见,例如设置 QLabel 对齐方式的函数是QLabel::setAlignment(Qt::Alignment)(typede...

danshiming的博客 2905
上一篇: Qt QVariant常用用法及QVariant和QList互转
下一篇: 关于QString、QLatin1String、QStringLiteral
进军蚁
博客等级 码龄7年 2粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值