QT_CONFIG宏用法及支持的参数
经常在Qt工程中看到QT_CONFIG宏,如下:
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printdialog)
// 其它代码略
又例如:
#if QT_CONFIG(opengl) // 是否支持OpenGLm_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 available1: 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_CONFIG宏用法及支持的参数相关推荐
- 【C语言】宏定义(不带参数的宏定义和带参数的宏定义)
目录 一.不带参数的宏定义 1.定义 2.#undef 指令取消宏定义 二.带参数的宏定义 1.定义 2.宏定义参数替换的注意事项 三.带参数的宏定义和带参函数的区别 一.不带参数的宏定义 1.定义 ...
- ACMNO.30 C语言-宏交换 定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。
题目描述 定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参.输出已交换后的两个值. 输入 两个数,空格隔开 输出 交换后的两个数,空格隔开 样例输入 1 2 样例输出 2 ...
- js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数
js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数 参考文章: (1)js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数 (2)https://www.cnblogs.co ...
- pyrealsense2 sensor.get_supported_options()(获取当前sensor支持的参数)
文章目录 获取当前color sensor支持的参数 获取当前depth sensor支持的参数 获取color_sensor和depth_sensor各自不同的参数 获取color_sensor和d ...
- go函数详解:函数定义、形参、返回值定义规范、函数内存分析、不支持重载、支持可变参数、基本数据类型和数组默认都是值传递的、支持自定义数据类型、函数返回值命名
引入 [1]为什么要使用函数: 提高代码的复用型,减少代码的冗余,代码的维护性也提高了 [2]函数的定义: 为完成某一功能的程序指令(语句)的集合,称为函数. [3]基本语法 func 函数名(形参列 ...
- Golang中支持可变参数
Golang中支持可变参数 (如果你希望函数带有可变数量的参数) package main import "fmt" //定义一个函数,函数的参数为:可变参数 ... 参数的数量可 ...
- BOOST_MP11_VERSION宏用法的测试程序
BOOST_MP11_VERSION宏用法的测试程序 实现功能 C++实现代码 实现功能 BOOST_MP11_VERSION宏用法的测试程序 C++实现代码 #include <boost/m ...
- BOOST_LOG_UNIQUE_IDENTIFIER_NAME宏用法的测试程序
BOOST_LOG_UNIQUE_IDENTIFIER_NAME宏用法的测试程序 实现功能 C++实现代码 实现功能 BOOST_LOG_UNIQUE_IDENTIFIER_NAME宏用法的测试程序 ...
- BOOST_CURRENT_FUNCTION宏用法的测试程序
BOOST_CURRENT_FUNCTION宏用法的测试程序 实现功能 C++实现代码 实现功能 BOOST_CURRENT_FUNCTION宏用法的测试程序 C++实现代码 #define BOOS ...
最新文章
- ​Nessus更新到8.9.1
- sybase 数据导入mysql_Windows环境下Sybase12.5 数据库创建与导入数据库.docx
- 【原理+实战+视频+源码】docker权限参数
- 拆分工作簿为多个文件_如何批将Excel的多个Sheet工作表拆分为独立的工作簿?...
- 多目标进化优化 郑金华pdf_简化审批流程 金华首张以“告知承诺制”审批的医疗器械经营许可证发放...
- jQuery中的子(后代)元素过滤选择器(四、六):nth-child()、first-child、last-child、only-child...
- MySQL替换函数REPLACE替换字符串方法
- 添加子节点时报错:TypeError: oUl.appendChild is not a function
- Oracle密码过期怎么办
- UE4C++ Http下载文件
- 微支付几个参数的获得
- 计算机硬件选购与市场调查实验报告,计算机组装与维护实训报告范例-20210527010902.docx-原创力文档...
- cpu温度过高 ubuntu_Ubuntu/Debian 查看CPU温度的方法
- 威锋十年:叫一声「果粉」,你还敢答应吗?
- AudioTrack音频播放
- Error:Attempt to invoke virtual method ‘void android.widget.TextView.setText(java.lang.CharSeq
- java excel cell 设置样式_java中对Excel的创建、样式修改
- pb3-protobuf 格式-上传 网络信息内容
- IIS配置反向代理URL rewrite.dll加载失败
- 云队友丨追求复利人生,升级思维模型的四个层级