1. 二进制兼容的理解
首先按照本文对二进制兼容进行理解。此处是本人的总结:
将类的私有属性(不需要暴露的部分)放到私有类中,在类中定义私类的指针进行交互,指针的大小是已知不变的(指针数据类型为Int,4个字节),软件发布后只需要改私类中的部分,不会影响类的大小和结构,这样就能保证通过这种方式发生变化时公有接口就不会发生改变,整个软件不需要重新编译,如果使用私有的成员,则可能导致接口变化,就需要软件整体重新编译。私有类中定义公有的指针,公有类中定义私有指针,实现公有类和私有类之间进行函数的调用。
2. QT中私类和类的交互:d、q指针
从上边二进制兼容我们可以知道,私类与类之间是需要进行数据和方法的相互交互的,在Qt中也是定义了相应的私有类和类的指针用于相互之间的交互,我们以QSlider
的源代码进行分析。如果不知道怎么查看源代码,请参考:qt一些零散知识点的总结(默认编码设置、指定运行的exe文件、查找缺少的库、大工程中查找某一个变量、查看QT本身源代码)
(1)Qslider
类的定义及函数:
class Q_WIDGETS_EXPORT QSlider