日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

QT_CONFIG宏用法及支持的参数

發(fā)布時(shí)間:2023/12/15 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QT_CONFIG宏用法及支持的参数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

經(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。