当前位置: 首页 > news >正文

qt模块feature QT_FEATURE_* qt_lib_*.pri QT_CONFG qtConfig

qt为方便对代码进行删减,将代码拆分成很多模块,对每个模块梳理出feature,为了简化程序的使用和其他目的,qt还对每个模块分成public模块和private模块(比如core分为core和core-privare模块,但两者公用同一个core.dll)。通过模块对应源码文件夹下的confiure.json控制feature开关来删减系统不支持或者不必要的feature,对应feature的condition是可配置的,感兴趣的可以查看qt的编译脚本文件(shell脚本/dos脚本)。

widgets/configure.json

在配置好模块的configure.json后,运行configure启动编译脚本(shell脚本/dos脚本),过程中会自动为模块生成对应头文件,比如widgets 模块,会生成qtwidgets-config.h和qtwidgets-config-p.h,每一个属性在.h中都有一个宏,作为代码的宏开关,值一般为1或-1,用于控制模块源码的逻辑,其内容如下:

qtwidgets-config.h


在qt 的源文件qglobal.h中有这样两个方便使用feature对应宏开关的宏定义QT_CONFIGQT_REQUIRE_CONFIG

//QtInstallDir\Qt5.12.0\5.12.0\msvc2015_64\include\QtCore\qglobal.h
#define QT_CONFIG(feature) (1/QT_FEATURE_##feature == 1)
#define QT_REQUIRE_CONFIG(feature) Q_STATIC_ASSERT_X(QT_FEATURE_##feature == 1, "Required feature " #feature " for file " __FILE__ " not available.")
qmainwindow.h

qt模块编译好后会产生对应qt_lib_*.pri和qt_lib_*_private.pri脚本(qmake language脚本)文件,方便qmake生成makefile时查询模块是否支持对应的feature。下面是qt_lib_core.pri文件内容:

#D:\Qt\Qt5.12.0\5.12.0\msvc2015_64\mkspecs\modules\qt_lib_core.pri
QT.core.VERSION = 5.12.0
QT.core.name = QtCore
QT.core.module = Qt5Core
QT.core.libs = $$QT_MODULE_LIB_BASE
QT.core.includes = $$QT_MODULE_INCLUDE_BASE $$QT_MODULE_INCLUDE_BASE/QtCore
QT.core.frameworks =
QT.core.bins = $$QT_MODULE_BIN_BASE
QT.core.depends =
QT.core.uses = libatomic
QT.core.module_config = v2
QT.core.CONFIG = moc resources
QT.core.DEFINES = QT_CORE_LIB
QT.core.enabled_features = properties animation textcodec big_codecs codecs commandlineparser cxx11_future textdate datestring filesystemiterator filesystemwatcher gestures itemmodel proxymodel identityproxymodel library mimetype processenvironment process statemachine qeventtransition regularexpression settings sharedmemory sortfilterproxymodel std-atomic64 stringlistmodel systemsemaphore temporaryfile timezone topleveldomain translation xmlstream xmlstreamreader xmlstreamwriter
QT.core.disabled_features =
QT_CONFIG += properties animation textcodec big_codecs codecs textdate datestring doubleconversion filesystemiterator filesystemwatcher gestures itemmodel proxymodel identityproxymodel library mimetype process statemachine regularexpression settings sharedmemory sortfilterproxymodel stringlistmodel systemsemaphore temporaryfile translation xmlstream xmlstreamreader xmlstreamwriter
QT_MODULES += core

里面的QT.core.enabled_features项描述了core模块所支持的特性,所有的features是在编译模块源码之前,事先配置对应模块(module)源码文件夹下的configure.json文件内容的执行结果。qt_lib_*.pri只是提供一个方便脚本(qmake language脚本)快速查询的结果的功能。对比可以发现,qt_lib_*.pri中的enable_features项与qt*-config.h中的项基本一一对应。
脚本查询的入口参考:qtConfig(inputdialog) 

qtConfig()查询的是模块中的enabled_features值,这个脚本中的QT_CONFIG暂时没有发现有什么用。

QT_CONFIG宏用法及支持的参数_荆楚闲人的博客-CSDN博客_qtconfig

 qt 私有头文件 private_丘上人的博客-CSDN博客 

qmake language qt 工程文件 配置文件 .pro .prl .prf .pri 词法 语法 for循环 判断语句 函数定义_丘上人的博客-CSDN博客

相关文章:

  • 自适应网站系统/聊城疫情最新消息
  • 怎样创造网站/网站收录查询平台
  • 好的模板网站建设/seo首页优化
  • 做网站dreamwa/郑州网站优化渠道
  • seo软件视频教程/关键词优化报价
  • 网站测试速度很慢/建立免费个人网站
  • 5. JVM调优工具详解及调优实战(这里有我的实战案例预制构件生产管理平台)
  • ES6:ES6 的新增语法
  • 优雅的springboot参数校验(一)
  • 刷题记录:HDU - 3001Travelling
  • OVN数据库备份和恢复
  • 配置 4G 模块为WAN口上网
  • C++异常和断言
  • 十四、使用 Vue Router 开发单页应用(1)
  • 自动推送消息时附带图片的一种实现方式
  • MySQL存储引擎的选择
  • 实战讲解Kibana开发工具(Dev tools)操作ES:CURD(图+文)
  • Qt第二十八章:异步