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宏用法及支持的参数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vivo发布“手语翻译官”功能 精准识别
- 下一篇: 《旷野之息》发售6周年:续作《塞尔达传说