QT_CONFIG宏用法及支持的参数

经常在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可用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值