QT_CONFIG宏用法及支持的参数

QT_CONFIG宏:编译时特性检测的实战指南 本文深入解析QT_CONFIG宏在Qt开发中的核心作用,详细介绍其编译时特性检测机制及实际应用场景。通过剖析宏展开原理和特性定义方式,帮助开发者掌握条件编译技巧,规避跨平台兼容性问题,并提供调试方法和最佳实践建议,提升代码健壮性。 阅读详情
AI摘要

本文解析了Qt中的QT_CONFIG宏的含义和用法,介绍了如何通过参数检测Qt特性,如OpenGL支持。它是编译期静态检查的实例,展示了宏展开和特性状态检查的过程。

经常在Qt工程中看到QT_CONFIG宏,如下:

#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printdialog)
// 其它代码略

又例如:

#if QT_CONFIG(opengl) // 是否支持OpenGL
    m_pbuffer_size = 1024;
#endif

// 其它代码略

问题的提出:

  • QT_CONFIG宏的含义是什么?
  • QT_CONFIG用法,主要是参数怎么传?

QT_CONFIG的定义在Qt安装目录下的include\QtCore\qglobal.h 头文件中定义的,如下:

/*
    The QT_CONFIG macro implements a safe compile time check for features of Qt.
    Features can be in three states:
        0 or undefined: This will lead to a compile error when testing for it
        -1: The feature is not available
        1: The feature is available
*/
#define QT_CONFIG(feature) (1/QT_FEATURE_##feature == 1)

上面的注释说得很明白,就是:

QT_CONFIG宏实现了一个在编译时期安全检查,检查指定的Qt特性是否存在或是否可利用。返回值如下:

0或者未定义:这将导致一个编译时期的错误(有点类似C++11的static_assert,其实其幕后就是static_assert实现的)。

-1:指定的Qt特性不可用。

1:指定的Qt特性可利用。

可以看到QT_CONFIG展开对应为(1/QT_FEATURE_##feature == 1),大家要注意C语言宏表达式中##号的含义,如果不懂,请参考《C++/C宏定义中## 连接符与# 符的含义》文章。说白了,宏##就是连接符的作用,就是把QT_FEATURE_ 和feature连接为一个整体,如:当调用QT_CONFIG(opengl),则展开后为:(1/QT_FEATURE_opengl == 1)。而在Qt安装目录下的很多模块下有xxxx-config.h文件,如:QtGui模块就有一个qtgui-config.h文件,位于include\QtGui目录,该文件内容如下:

 可以看到定义了一些宏,而这些宏除去开头的QT_FEATURE_部分外的就是传给QT_CONFIG的参数,如:QT_FEATURE_opengl,则传入opengl到QT_CONFIG宏,就可以检测opengl是否配置了

QT_FEATURE_opengl为1,传入QT_CONFIG宏后变为1/QT_FEATURE_opengl == 1,即为1/1 == 1,也即为true,证明opengl可用。

QT学习--安装与移植 QT开发环境的安装源码包介绍--以4.5.3为例我所用到的QT源码包有两种,一种是PC上使用基于X11架构的,一种是嵌入式使用的基于FRAMEBUFFER架构的,分别下载这两个源码包,qt-x11-opensource-src-4.5.3.tar.gz                             PC上使用qt-embedded-linux-opensorce-src- 阅读详情

相关推荐

QT使用qt.conf文件来部署应用程序

后经查证是没有macdeployqt进行部署,程序内没有平台依赖库Plugins文件Qt程序启动时会用QLibraryInfo类载入qt.conf文件, 按下面的路径顺序搜索 :资源系统, :/qt/etc/qt.confMac系统下会在资源目录, 例如:assistant.app/Contents/Resources/qt.conf执行档所在目录,如:QCoreApplication::applicationDirPath()+QDir::seperator()+”qt.conf”

yth796的专栏 3166

用qt.conf和qtconfig配置Qt运行设定

一个重要的Qt配置文件qt.conf, 这里就讲讲关于这个文件的前世今生。 (本文部分内容出自Qt文档 Using qt.conf) 经常有人写Qt程序里头用到Qt的插件,有时忘记把插件与程序一起发布,有时是不喜欢Qt预设的插件默认路径, 导致程序找不到插件。 遇到这种情况先看看那篇打包发布的文章, 默认情况下Qt运行需要的各种路径都写死在Qt库里, 如果实在不喜欢Qt的插件路径就

天好蓝 1万+

Qt常用命令和pro参数

Qt常用工具(命令行指令) 位于 C:\Qt5.7.1\5.7\msvc2015_64\bin 命令 功能 assistant 帮助文档 designer 设计器 linguist 翻译工具 lupdate 提取翻译字符串和生成ts文件 lrelease 从ts文件生成qm文件 moc Qt Meta Ob...

yao5hed的专栏 1918

qt之configure选项说明

先使用./configure --help来看看都有哪些参数 1.【安装选项】 选项 作用 -prefix 指定部署目录(默认 /usr/local/Qt-5.6.0) -extprefix 安装目录(默认 SYSROOT/PREFIX) -hostprefix [dir] 运行在这个主机上的构建工具的安装目录,如果不给定,使用当前目录(默认 EXTPREFIX) ...

hezhanran的博客 6049

CMake与Qt6集成实战:解决Could not find Qt6Config.cmake的三种路径配置方案

本文针对CMake构建Qt6项目时常见的“Could not find Qt6Config.cmake”错误,提供了三种核心解决方案:通过CMAKE_PREFIX_PATH全局引导、使用Qt6_DIR精准定位,以及理解Qt Creator的自动配置机制。文章深入剖析了每种方案的原理、设置方法和适用场景,并分享了编写健壮路径检测脚本、处理多版本共存及跨平台兼容性的实战技巧,帮助开发者彻底解决Qt6与CMake的集成难题。

pink的博客 1175

QToolTip 是 Qt 框架中用于显示工具提示(Tooltip)的类

需要注意的是,工具提示的显示依赖于操作系统和平台的默认行为,可能会受到系统设置或样式的影响。同时,一些控件也可能有自己特定的工具提示显示方式,例如。工具提示是一种小窗口,通常在用户将鼠标悬停在控件上时显示,提供有关该控件的额外信息或说明。是 Qt 框架中用于显示工具提示(Tooltip)的类。类提供了设置和管理工具提示的方法。

m0_46376834的博客 2741

【QT】通过QT_QPA_EGLFS_KMS_CONFIG宏来解决arm32环境下QT界面设置为透明却黑屏的问题

解决arm32环境下QT界面设置为透明却黑屏的问题问题描述解决方法其他 问题描述 在arm32环境下,使用Q5.9以上的QT时,不管如何设置界面的透明属性(在样式表里设置背景颜色为透明亦或者是直接设置界面的透明属性为true),都无法使得界面透明,从而显示QT app之外的画面;而本来应该透明的部部位全部变成黑色。 在网上搜索了一圈,各种方法绕来绕去都没有解决问题。 解决方法 因为其他问题在看QT源码的时候,发现QT可以设置显示画面绘制的格式(RGB565、XRGB8888和ARGB8888等),而透明属性

chen9807的博客 5069

AUTOSAR BswM配置实战:手把手教你用Vector Davinci Configurator搭建第一个模式管理规则

本文详细介绍了如何使用Vector Davinci Configurator工具配置AUTOSAR BswM模块,实现车身控制ECU的模式管理规则。通过实战案例,从环境准备、核心概念梳理到具体配置步骤,包括ModeRequestPort、ModeCondition、Logical Expression和Rules的构建,帮助工程师快速掌握BswM配置技巧,提升汽车电子软件开发效率。

weixin_28678831的博客 351

QT_REQUIER_CONFIG

QT_REQUIER_CONFIG https://www.cnblogs.com/microthink/p/9534935.html 在qglobal.h中,定义了很多宏。下面这个QT_REQUIER_CONFIG,展开成: 1 #define QT_REQUIRE_CONFIG(feature) Q_STATIC_ASSERT_X(QT_FEATURE_##feature == 1, “Req...

weixin_44740398的博客 965

(蓝桥杯)STM32G431RBT6(SysTick timer)

选用最基础的定时器。

2301_81764359的博客 1899

MATLAB并行开不了的解决办法

在服务器上新安装了MATLAB 2013b,在开并行计算的时候出现了下列问题 经过在网上搜多这个问题,我感觉这个问题应该是安装的时候的验证问题或者激活不成功之类的。注意其中有一句validate the profile ‘local’ in the Cluster Profile Manager.在matlab官网上找到了设置Cluster Manager的教程,如下 parallel>

sinat_36713319的博客 5987

别再乱用QT_CONFIG了!手把手教你读懂Qt源码里的那些“开关”宏

本文深入解析Qt源码中的QT_CONFIG宏,揭示其作为条件编译核心机制的工作原理。通过实战案例展示如何正确使用这些'开关'宏处理跨平台兼容性,避免常见错误,并提升代码的可移植性和健壮性。

weixin_26945061的博客 312

IP-Guard安全网关实例

企业相关情况: 1.OA系统,主要为日常工作使用,该系统IP为192.168.1.2,端口为8080; 2.文件共享服务器,用于存放日常工作资料和文档,该文件共享服务器的IP为192.168.1.1,其中\\192.168.1.1\private 目录中的存放着公司重要文档,不能随意外传; 3.安全网关已采用串联的方式联入网络,IP为192.168.2.6,所有机器访问OA系统和文件共享服务...

IP-Guard专栏 706

QT的.pro文件参数说明

1.QT qt的QT是引入qt模块的参数,一般类似这样的用法 QT += core gui #加入core是核心模块,gui是设计图形界面模块 QT += widgets #加入widgets,widgets是窗体的模块 2.TEMPLATE 这是用于指明要生成的目标文件类型,一般用法如下 TEMPLATE =app #指明app,生成应用程序 模板变量告诉qmake为这个应用程序生成哪种makefile。下面是可供使用的选择: app - 建立一个应用程序的makefile。这是默认值,

m0_69605900的博客 2042

uniapp - [全端兼容] 详解实现国际化多语言切换全流程及示例,全部页面中英文多语言随意切换即时生效,语言切换全项目立即变化可自定义新增各国其他语言,uniApp实现中英文语言切换完整源码教程!

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,uniapp多语言实现,uni-app项目使用多语言切换功能,中英文切换,uniapp实现中英文语言切换,uniApp实现国际化多语言切换,中文英文之间的更换,Uniapp使用什么插件能支持多种语言,退出后重启依然能让语言保留,设置可切换中英文,uniapp国际化页面双语/顶部导航双语/根据系统语言双语,标题栏文字原生底部菜单tabbar怎么改,使用vue-i18n国际化多国语言,全平台i18n插件,

🏆 前端领域优质创作者 1万+

华为云物联网系统开发(纯云端)外包方案及项目需求说明书

提供一个详细的需求文档(SRS,Software Requirements Specification),用于指导完全零基础的非专业负责人外包兼职专业技术人员开发一款基于华为云物联网平台、Astro低代码平台和Astro Canvas大屏设计的物联网系统,纯软件实现并支持下载部署。文档涵盖详细的软硬件组成清单(聚焦软件和云服务)、技术文档要求等,确保非专业人员在移交后能够复用、扩展和操作该系统。本文档简洁、全面,适合非技术背景的管理者使用,并基于华为云生态的内部实施部署。

hy行者勇哥的博客 618

Qt 之connect 信号和槽函数连接的几种方法的总结(含signalmaper、lamda方式)

1. 最常规的用法: 信号可以是插件自带的,也可以是自己定义的如: //新建一个按钮 QPushButton * btn = new QPushButton(this); btn->setText("设置"); //将信号和槽连接 其中btnclicked()为自定义的槽函数 connect(btn, SIGNAL(clicked()), th...

学之知之的博客 4万+

RK3568 OpenHarmony3.2 蓝牙模块AP6275S适配(已更新)

OpenHarmony3.2 Release版默认是适配AP6275s这款蓝牙芯片的,但是打开蓝牙,发现无法扫描到设备、连接设备。目前平台soc为RK3568,根据项目要求,自定义外设。接下来将以解决bug为目的,学习和记录OpenHarmony平台下蓝牙模块的适配流程。RK809 CLK:32.768KHzUART1M1:与蓝牙模块通讯的串口:GPIO4_B6:GPIO4_A5WAKE_GPIO:未定义,硬件拉高1.8V: 未定义,悬空主要是打开串口,/dev/ttyS1,得到文件描述符fd。

Martian_Jonas的博客 2245

详细介绍Qt中用于断言的宏 Q_ASSERT

可通过重写 QtMessageHandler 捕获断言失败事件,自定义错误处理逻辑(例如记录日志而非崩溃):// ...Q_ASSERT仅用于调试,不可替代运行时错误处理。结合 Q_ASSERT_X提供更清晰的错误信息。合理配置构建模式,避免影响 Release 版本性能。通过合理使用断言,可以显著提升代码的健壮性和可维护性。

weixin_45805339的博客 1295

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Qt 项目文件(.pro)概述

Qt工程项目由项目文件`(.pro)`进行管理。qmake使用文件中的信息生成Makefile,其中包含构建每个项目所需的所有命令。`pro`文件通常包含源文件和头文件的列表、常规配置信息以及任何特定于应用程序的详细信息,例如要链接的额外库的列表,或要使用的额外包含路径的列表。

做减求空 1637

jre9下载 jdk9

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

【Qt】Qt各版本对C++标准的支持情况

Qt 版本与 C++ 标准支持

weixin_43510208的博客 2305

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: C++/C宏定义中## 连接符与# 符的含义
下一篇: foreach、qAsConst用法总结
荆楚闲人
博客等级 码龄20年 3万+粉丝 473原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值