Qt常用宏定义判断大全

        Qt 提供了一系列预定义宏用于判断 Qt 版本、操作系统平台、编译器特性等。这些宏在跨平台开发中非常有用。

1. Qt 版本判断宏

// 检查Qt版本
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)// Qt 5.15.0及以上版本特有代码
#endif// 常用版本判断
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)// Qt6特有代码
#elif QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)// Qt5特有代码
#else// Qt4代码
#endif

2. 操作系统平台判断 

// 操作系统平台判断
#ifdef Q_OS_WIN// Windows平台特有代码#ifdef Q_OS_WIN32// 32位Windows#endif#ifdef Q_OS_WIN64// 64位Windows#endif
#endif#ifdef Q_OS_LINUX// Linux平台特有代码
#endif#ifdef Q_OS_MACOS// macOS平台特有代码(原Q_OS_MAC在Qt5.9后建议使用Q_OS_MACOS)
#endif#ifdef Q_OS_ANDROID// Android平台特有代码
#endif#ifdef Q_OS_IOS// iOS平台特有代码
#endif#ifdef Q_OS_UNIX// 所有Unix-like系统(包括Linux、macOS等)
#endif

3. 编译器特性判断

// 编译器判断
#ifdef Q_CC_MSVC// Microsoft Visual C++编译器
#endif#ifdef Q_CC_GNU// GCC编译器
#endif#ifdef Q_CC_CLANG// Clang编译器
#endif// C++标准版本判断
#if __cplusplus >= 201703L// C++17及以上
#elif __cplusplus >= 201402L// C++14
#elif __cplusplus >= 201103L// C++11
#endif

4. 构建类型判断 

// 调试/发布模式判断
#ifdef QT_DEBUG// 调试模式特有代码
#else// 发布模式代码
#endif// 静态/动态库判断
#ifdef QT_STATIC// 静态链接Qt库
#endif

5. 功能特性判断

// 检查Qt模块是否可用
#ifdef QT_WIDGETS_LIB// Widgets模块可用
#endif#ifdef QT_NETWORK_LIB// Network模块可用
#endif#ifdef QT_SQL_LIB// SQL模块可用
#endif// 检查特性支持
#ifdef QT_DEPRECATED_WARNINGS// 启用了deprecation警告
#endif#ifdef QT_RESTRICTED_CAST_FROM_ASCII// 启用了从ASCII的受限转换
#endif

6. 处理器架构判断

// 处理器架构判断
#ifdef Q_PROCESSOR_X86// x86架构
#endif#ifdef Q_PROCESSOR_ARM// ARM架构
#endif#ifdef Q_PROCESSOR_X86_64// x86_64(64位)架构
#endif

7. 实用宏定义

// 字符串化宏
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)// 标记未使用参数(避免编译器警告)
#define Q_UNUSED(x) (void)x;// 标记函数为弃用
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)Q_DECL_DEPRECATED void oldFunction();
#endif// 标记函数为不推荐使用(但尚未弃用)
Q_DECL_DEPRECATED_X("Use newFunction() instead") void legacyFunction();

8. 条件编译最佳实践

// 平台特定代码处理示例
QString getConfigPath() 
{QString path;#ifdef Q_OS_WINpath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
#elif defined(Q_OS_MACOS)path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
#elif defined(Q_OS_LINUX)path = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);
#elsepath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation);
#endifreturn path;
}// 版本兼容处理示例
void setHighDpiScaling() 
{
#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
#endif
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/76469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实战 | 餐厅点餐小程序技术解析:SpringBoot + UniApp 高效开发指南

🖥️ 一、系统架构概览 1.1 技术选型 为了确保开发效率和系统稳定性,我们采用以下技术栈: 模块技术选型后台服务SpringBoot MyBatis-Plus MySQL用户端(点餐小程序)UniApp(Vue 语法)师傅端&…

实现在Unity3D中仿真汽车,而且还能使用ros2控制

文章目录 前言(Introduction)搭建开发环境(Setup Development Environment)在window中安装Unity(Install Unity in window)创建Docker容器,并安装相关软件(Create Docker containers…

华为配置篇-BGP实验

BGP 一、简述二、常用命令总结三、实验 一、简述 IBGP 水平分割:从一个 IBGP 对等体学到的路由,不会再通告给其他的 IBGP 对等体。在一个 AS 内部,路由器之间通过 IBGP 交换路由信息。如果没有水平分割机制,当多个路由器之间形成…

Python视频标签工具详解:基于wxPython和FFmpeg的实现

在当今数字媒体时代,视频内容的管理和标记变得越来越重要。无论是研究人员需要对实验视频进行时间点标记,教育工作者需要对教学视频添加注释,还是个人用户希望对家庭视频进行分类整理,一个高效的视频标签工具都是不可或缺的。本文…

国产三维CAD「皇冠CAD」在汽车零部件领域建模教程:刹车片

本教程深度融合三维皇冠CAD(CrownCAD)的MBD(Model-Based Definition)设计理念,通过参数化建模、智能约束管理、动态装配验证等功能,实现数据驱动设计,精准解决了汽车制动系统中精密制动组件的设…

C#从入门到精通(3)

目录 第九章 窗体 (1)From窗体 (2)MDI窗体 (3)继承窗体 第十章 控件 (1)控件常用操作 (2)Label控件 (3)Button控件 &…

关于跨域与.NET的处理方案

在 Web 开发里,浏览器的同源策略是一项关键的安全机制。同源指的是两个 URL 的协议、域名和端口都相同。当浏览器从一个源(域名、协议、端口)的网页去请求另一个源的资源时,就会产生跨域问题。例如,从 http://www.exam…

react 15-16-17-18各版本的核心区别、底层原理及演进逻辑的深度解析--react18

React 18 是一次重大的版本升级(发布于2022年),引入了并发渲染(Concurrent Rendering) 和一系列新特性,旨在提升应用性能、用户体验和开发灵活性。 一、核心新特性 并发模式(Concurrent Mode&a…

基于Spring Boot的平面设计课程在线学习平台系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

Scala-面向对象

Scala 包 基本语法 package 包名 Scala 包的三大作用(和 Java 一样) 区分相同名字的类 当类很多时,可以很好的管理类 控制访问范围 包的命名、说明、对象 包的命名 命名规则 只能包含数字、字母、下划线、小圆点.,但不能用数字…

Excel 使用技巧:excel 合并不同列内容; excel 将公式转化为文本

Excel 使用技巧 目录 Excel 使用技巧excel 合并不同列内容="A:"&C1&"、B:"&D1&"、C:"&E1&"、D:"&F1excel 将公式转化为文本右键选择行粘贴某一列均填入“提示词”单击拖动双击某一列均填入“1”清除1…

【数字化转型,企业应用上云】---持续集成能力重塑企业软件交付新范式

在数字化转型浪潮中,软件交付的速度与质量已成为企业核心竞争力的关键。如何高效管理从代码开发到生产上线的全流程,实现开发与运维的无缝协作?如何通过自动化手段减少人为失误、加速迭代周期?我们出的研发效能管理平台&#xff0…

OpenCV图像形态学:原理、操作与应用详解

一、引言 图像形态学(Image Morphology)是图像处理领域的一个重要分支,它基于集合论、格论、拓扑学和随机函数理论,主要用于分析和处理图像的几何结构。形态学操作通过特定的结构元素(Structuring Element)…

jenkins 参数化发布到服务器 publish over ssh、label、Parameterized publishing

前言 jenkins 参数化发布到服务器 jenkins可匹配标签通过一个字符串或者正则表达式来匹配jenkins 可通过参数配置发布到服务器,比如打包后,根据参数配置,只发布到某个服务器。 设置选项参数 新增选项参数,比如填入myParameter…

第十二章网络规划设计

文章目录 12-1考点分析12-2综合布线(历年高频考点)12-3网络设计与分析12-4网络结构与功能12-5广域网接入技术12-6网络故障诊断与排查章节总结 12-1考点分析 12-2综合布线(历年高频考点) 结构化布线系统 网络规划和设计是一个迭代和优化的过程。 ■ 结构化综合布线系统是基于…

Qt基本框架(1)

本篇主要介绍Qt的基本框架,并实现简单的按钮事件 本文部分ppt、视频截图原链接:[萌马工作室的个人空间-萌马工作室个人主页-哔哩哔哩视频] 1. Qt基本框架介绍 Qt基本框架主要分为两部分:Qt实例对象和Qt窗口。Qt实例对象负责初始化Qt运行时…

数据仓库项目启动与管理

数据仓库项目启动与管理 确定项目 评估项目就绪情况 项目就绪的三个条件 强力型高级业务管理发起人 对数据仓库解决方案的影响有先见之明是所在组织内有影响的领导者要求严格,但是又比较现实,会为其他成员提供强力支持 强制型业务动机 数据仓库系统和战略性业务动机紧密结合…

C 标准库 - `<ctype.h>`

C 标准库 - <ctype.h> 在C语言编程中&#xff0c;标准库函数 <ctype.h> 提供了一组用于检查字符类型、转换大小写以及其他字符处理的函数。这些函数对于字符处理和字符串操作至关重要&#xff0c;特别是在处理用户输入或文件内容时。以下是关于 <ctype.h> 标…

安装完 miniconda3 ,cmd无法执行 conda 命令

提示&#xff1a;安装 miniconda3 文章目录 前言一、安装二、安装完&#xff0c;cmd 无法执行 conda 前言 提示&#xff1a;版本 系统&#xff1a;win10 codna: miniconda3 安装完 miniconda3 &#xff0c;cmd无法执行 conda 命令 提示&#xff1a;以下是本篇文章正文内容&am…

RedisTemplate 的 6 个可配置序列化器属性对比

RedisTemplate 的 6 个可配置序列化器属性对比 RedisTemplate 提供了以下 6 个核心属性&#xff0c;用于分别配置键、值、哈希类型数据的序列化方式&#xff1a; 1. keySerializer 作用&#xff1a;定义 Redis 键的序列化方式。默认值&#xff1a;JdkSerializationRedisSeria…