QT_CONFIG宏用法及支持的参数
經(jīng)常在Qt工程中看到QT_CONFIG宏,如下:
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printdialog) // 其它代碼略又例如:
#if QT_CONFIG(opengl) // 是否支持OpenGLm_pbuffer_size = 1024; #endif// 其它代碼略問(wèn)題的提出:
- QT_CONFIG宏的含義是什么?
- QT_CONFIG用法,主要是參數(shù)怎么傳?
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)上面的注釋說(shuō)得很明白,就是:
QT_CONFIG宏實(shí)現(xiàn)了一個(gè)在編譯時(shí)期安全檢查,檢查指定的Qt特性是否存在或是否可利用。返回值如下:
0或者未定義:這將導(dǎo)致一個(gè)編譯時(shí)期的錯(cuò)誤(有點(diǎn)類(lèi)似C++11的static_assert,其實(shí)其幕后就是static_assert實(shí)現(xiàn)的)。
-1:指定的Qt特性不可用。
1:指定的Qt特性可利用。
可以看到QT_CONFIG展開(kāi)對(duì)應(yīng)為(1/QT_FEATURE_##feature == 1),大家要注意C語(yǔ)言宏表達(dá)式中##號(hào)的含義,如果不懂,請(qǐng)參考《C++/C宏定義中## 連接符與# 符的含義》文章。說(shuō)白了,宏##就是連接符的作用,就是把QT_FEATURE_?和feature連接為一個(gè)整體,如:當(dāng)調(diào)用QT_CONFIG(opengl),則展開(kāi)后為:(1/QT_FEATURE_opengl == 1)。而在Qt安裝目錄下的很多模塊下有xxxx-config.h文件,如:QtGui模塊就有一個(gè)qtgui-config.h文件,位于include\QtGui目錄,該文件內(nèi)容如下:
?可以看到定義了一些宏,而這些宏除去開(kāi)頭的QT_FEATURE_部分外的就是傳給QT_CONFIG的參數(shù),如:QT_FEATURE_opengl,則傳入opengl到QT_CONFIG宏,就可以檢測(cè)opengl是否配置了
QT_FEATURE_opengl為1,傳入QT_CONFIG宏后變?yōu)?/QT_FEATURE_opengl == 1,即為1/1 == 1,也即為true,證明opengl可用。
總結(jié)
以上是生活随笔為你收集整理的QT_CONFIG宏用法及支持的参数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: vivo发布“手语翻译官”功能 精准识别
- 下一篇: const int是什么类型_C++的c