qt对源码进行了分层,把数据成员都单独拉到一个*_p.h的头文件中,形成internal部分的接口类
Qt之二进制兼容
qt _p.h 文件的用途是什么
qt不建议用户使用internal部分的接口类,因为不同平台和不用版本的qt,internal部分的实现可能有差异,调用internla部分的接口类在跨平台或跨版本使用时可能会导致崩溃。
要启用模块(module)internal部分的头文件,将相应依赖项添加到pro,下面是达到这个目的的两种方案。
比如启用widgets的internal部分的头文件(假设原本QT的值为core gui widgets)
方式1: 直接在pro文件中加入下面代码来达到目的。
INCLUDEPATH +=D:\Qt\Qt5.12.0\5.12.0\msvc2015_64/include/QtCore \
D:\Qt\Qt5.12.0\5.12.0\msvc2015_64/include/QtCore/$$QT_VERSION D:\Qt\Qt5.12.0\5.12.0\msvc2015_64/include/QtCore/$$QT_VERSION/QtCore
方式2:QT += widgets-private
该语句意义就是在原有工程生成的Makefiled的INCLUDE项添加private部分的头文件。
可以用beyond compare对比添加前与添加后生成的的Mafile.Debug中的内容,以理解加与不加的区别。
这是添加widgets-private之后INCLUDE中多出来的项
-ID:\Qt\Qt5.12.0\5.12.0\msvc2015_64\include\QtWidgets\5.12.0
-ID:\Qt\Qt5.12.0\5.12.0\msvc2015_64\include\QtWidgets\5.12.0\QtWidgets
-ID:\Qt\Qt5.12.0\5.12.0\msvc2015_64\include\QtGui\5.12.0
-ID:\Qt\Qt5.12.0\5.12.0\msvc2015_64\include\QtGui\5.12.0\QtGui
-ID:\Qt\Qt5.12.0\5.12.0\msvc2015_64\include\QtCore\5.12.0
-ID:\Qt\Qt5.12.0\5.12.0\msvc2015_64\include\QtCore\5.12.0\QtCore
之后就可以在自己的工程中加入所需要的私有头文件,并调用私有头文件中定义的函数了
//E:\workspace\QtWork\moc\generator.cpp
.......
#include <private/qmetaobject_p.h> //for the flags.
#include <private/qplugin_p.h> //for the flags.
......
Qt 6 中的 Qt Extras 模块_feiyangqingyun的博客-CSDN博客
Qt自带未公开的属性_风起时~微凉的博客-CSDN博客_gui-private