Qt常用宏定义判断大全

news2025/4/13 14:29:46

        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_WIN
    path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
#elif defined(Q_OS_MACOS)
    path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
#elif defined(Q_OS_LINUX)
    path = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);
#else
    path = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation);
#endif

    return 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.coloradmin.cn/o/2327292.html

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

相关文章

14-SpringBoot3入门-MyBatis-Plus之CRUD

1、整合 13-SpringBoot3入门-整合MyBatis-Plus-CSDN博客 2、表 3、crud package com.sgu;import com.sgu.mapper.UserMapper; import com.sgu.pojo.User; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.spri…

三轴云台之相机技术篇

一、结构设计 三轴云台通常由空间上三个互相垂直的框架构成,包括内框(俯仰框)、中框(方位框)和外框(横滚框)。这些框架分别负责控制相机的俯仰运动、方位运动和横滚运动,从而实现对目…

Bugku-再也没有纯白的灵魂

下载文件发现是兽音先用https://roar.iiilab.com/加密flag 得到“~呜嗷嗷嗷嗷呜啊嗷啊呜呜嗷呜呜~嗷嗷~啊嗷啊呜嗷嗷~嗷~嗷~呜呜嗷呜啊啊”,与密文对比对比发现字段少个啊,并且B对应嗷,U对应呜,G对应啊,K对应~补充啊后…

多模态大语言模型arxiv论文略读(一)

Does Transliteration Help Multilingual Language Modeling? ➡️ 论文标题:Does Transliteration Help Multilingual Language Modeling? ➡️ 论文作者:Ibraheem Muhammad Moosa, Mahmud Elahi Akhter, Ashfia Binte Habib ➡️ 研究机构: Pennsyl…

单元测试原则之——不要模拟不属于你的类型

在单元测试中,不要模拟不属于你的类型(Don’t mock types you don’t own)是一个重要的原则。这是因为外部库或框架的类型(如第三方依赖)可能会在未来的版本中发生变化,而你的模拟可能无法反映这些变化,从而导致测试失效。 以下是一个基于Java Mockito 的示例,展示如何…

算法与数据结构面试题

算法与数据结构面试题 加油! 考查数据结构本身 什么是数据结构 简单地说,数据结构是以某种特定的布局方式存储数据的容器。这种“布局方式”决定了数据结构对于某些操作是高效的,而对于其他操作则是低效的。首先我们需要理解各种数据结构&a…

边缘检测技术现状初探2:多尺度与形态学方法

一、多尺度边缘检测方法 多尺度边缘检测通过在不同分辨率/平滑度下分析图像,实现: 粗尺度(大σ值):抑制噪声,提取主体轮廓细尺度(小σ值):保留细节,检测微观…

【AI News | 20250402】每日AI进展

AI Repos 1、Dolphin 由数据海洋AI与清华大学联合研发的Dolphin多任务语音识别模型正式亮相。该模型覆盖东亚、南亚、东南亚及中东地区40余种语言,并支持22种汉语方言,训练数据量超21万小时(含自有及开源数据),具备语…

操作系统高频(七)虚拟地址与页表

操作系统高频(六)虚拟地址与页表 1.什么是文件系统?它的作用是什么?⭐ 存储管理:文件系统负责管理计算机的存储设备,如硬盘、固态硬盘等。它将文件存储在这些设备上,并负责分配和回收存储空间…

openEuler24.03 LTS下安装Flume

目录 前提条件 下载Flume 解压 设置环境变量 修改日志文件 测试Flume 在node2安装Flume 前提条件 Linux安装好jdk Flume一般需要配合Hadoop使用,安装好Hadoop完全分布式集群,可参考:openEuler24.03 LTS下安装Hadoop3完全分布式 下载F…

现代几何风格网页标牌标识logo海报标题设计psai英文字体安装包 Myfonts – Gilroy Font Family

Gilroy 是一款具有几何风格的现代无衬线字体。它是原始 Qanelas 字体系列的弟弟。它有 20 种粗细、10 种直立字体和与之匹配的斜体。Light 和 ExtraBold 粗细是免费的,因此您可以随心所欲地使用它们。设计时考虑到了强大的 opentype 功能。每种粗细都包括扩展语言支…

ControlNet-Tile详解

一、模型功能与应用 1. 模型功能 ControlNet-Tile模型的主要功能是图像的细节增强和质量提升。它通过以下几个步骤实现这一目标: 语义分割:模型首先对输入的图像进行语义分割,识别出图像中不同的区域和对象。这一步是为了让模型理解图像的内…

leetcode 2873. 有序三元组中的最大值 I

欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击。 文章目录 题目描述题目剖析&信息挖掘解题思路方法一 暴力枚举法思路注意复杂度代码实现 方法二 公式拆分动态规划思路注意复杂度代码实现 题目描述 [2873] 有序三元…

RabbitMQ应用2

RabbitMQ应用2 一.实际业务逻辑订单系统中使用MQ(不写订单系统逻辑)1.项目的创建和准备2.代码实现ControllerConfigurationproperties 二.物流系统使用MQ(不实现物流系统业务)1.项目创建同订单(一样)2.代码…

Windows 实战-evtx 文件分析--笔记

Windows 取证之EVTX日志 - 蚁景网安实验室 - 博客园 一.evtx日志文件是什么 从 Windows NT 6.0(也就是 Windows Vista 和 Windows Server 2008)开始,微软引入了一种全新的日志文件格式,称为 evtx。这种格式取代了之前 Windows 系…

【postgresql】锁概览

常规锁 场景测试案例

子组件使用:visible.sync=“visible“进行双向的绑定导致该弹窗与其他弹窗同时显示的问题

问题描述&#xff1a;最近写代码时遇到了一个问题&#xff1a;点击A弹窗后关闭&#xff0c;继续点击B弹窗&#xff0c;这时会同时弹窗A、B两个弹窗。经过排查后发现在子组件定义时使用了:visible.sync"visible"属性进行双向的数据绑定 <template> <el-dial…

【AI产品分享】面向图片的原始位置翻译功能

1. 背景 在撰写文字材料时&#xff0c;往往需要配套图像以增强表达效果。然而&#xff0c;有时自己绘制的图可能达不到理想的质量&#xff0c;而在其他文献材料中却能发现更清晰、直观的示例。希望在“站在巨人的肩膀上”优化自己的图像时&#xff0c;通常希望在保留原始图像的…

【无标题】跨网段耦合器解决欧姆龙CJ系列PLC通讯问题案例

欧姆龙CJ系列PLC不同网段的通讯问题 一、项目背景 某大型制造企业的生产车间内&#xff0c;采用了多台欧姆龙CJ系列PLC对生产设备进行控制。随着企业智能化改造的推进&#xff0c;需要将这些PLC接入工厂的工业以太网&#xff0c;以便实现生产数据的实时采集、远程监控以及与企业…

K8S学习之基础七十二:Ingress基于Https代理pod

Ingress基于Https代理pod 1、构建TLS站点 &#xff08;1&#xff09;准备证书&#xff0c;在xianchaomaster1节点操作 cd /root/ openssl genrsa -out tls.key 2048 openssl req -new -x509 -key tls.key -out tls.crt -subj /CCN/STBeijing/LBeijing/ODevOps/CNak.lucky.com…