- QObject 是QT类体系中唯一的基类,大小如下:
qDebug()<<sizeof(QObject); 结果为:8
在QObject类中定义了一个QObjectData 类的指针 d_ptr,我理解为数据类指针。class Q_CORE_EXPORT QObject { Q_OBJECT ... protected: <span style="color:#ff0000;"> QScopedPointer<QObjectData> d_ptr;</span> }
-
在QObject 类的定义上面,还有一个QObjectData类,这个类里面封装类数据,而QObject类封装了句柄,这就是所谓的句柄实体模式,我就理解他为句柄--数据分离。 看到代码中有这么一处
在QObjectData类中定义了一个QObject 类的指针 q_ptr,我理解为句柄指针。这和上面的d_ptr 结合在一起看,可以得出,这2个类可以相互引用。QObjectData { public: virtual ~QObjectData() = 0; <span style="color:#ff0000;"> QObject *q_ptr;</span> QObject *parent; QObjectList children; <span style="white-space:pre"> </span>.... }
-
Q_D和Q_Q
我在看QT源码时,发现有非常多的Q_D和Q_Q,之前不知道是什么意思,现在大概了解了,Q_D(xxxClass)表示可以得到xxxClass的数据类,#define Q_D(Class) Class##Private * const <span style="color:#ff0000;">d</span> = d_func() #define Q_Q(Class) Class * const <span style="color:#ff0000;">q </span>= q_func()
Q_Q(xxxClass)表示可以得到xxxClass的接口类。 -
QT源码阅读--QObject
最新推荐文章于 2024-05-14 20:56:38 发布