当前位置: 首页 > news >正文

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_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
}

相关文章:

  • 从纸质到 AI 时代:我的笔记工具探索之旅
  • Z-Wave与Matter的协同应用:构建无缝互联的智能家居
  • 2025年华为HCIP题库分享
  • PyTorch + torchvision是什么
  • 《深度学习》——bert框架
  • Axure项目实战:智慧运输平台后台管理端-承运商管理(中继器筛选)
  • 设计模式扩展 MyBatis Plus BaseMapper接口
  • java学习笔记10——集合框架
  • 蚂蚁集团主导的ISO密码学国际标准立项,纳入国产算法
  • AI赋能股票:流通股本与总股本:定义、区别及投资意义解析
  • 【STM32单片机】#4 OLED调试外部中断
  • StarRocks的执行计划和Profile
  • 微软 GraphRAG 项目学习总结
  • ubuntu的ubuntu--vg-ubuntu--lv磁盘扩容
  • 黑盒测试、白盒测试、集成测试和系统测试的区别与联系
  • 在 Windows 中使用 DeepSeek 和 Milvus 搭建个人知识库
  • 新加坡国立大学张阳团队开发第二代RNA结构预测算法,多项基准测试超越SOTA
  • 【橘子大模型】使用LangChain和LLM交互
  • 为AI聊天工具添加一个知识系统 之157: Firstness,Secondness和Thirdness
  • Odoo/OpenERP 和 psql 命令行的快速参考总结
  • 广东购物网站建设报价/正规电商平台有哪些
  • 常德网站开发公司/肇庆疫情最新情况
  • 南通企业网站seo/有没有免费的推广网站
  • 苏州网站维护/搜索引擎优化主要包括
  • 小红书seo排名帝搜软件/seoul怎么读
  • 免费自助搭建网站/怎么seo关键词优化排名