QObjectData类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Q_CORE_EXPORT QObjectData {
Q_DISABLE_COPY(QObjectData)
public:
QObjectData() = default;
virtual ~QObjectData() = 0;
QObject *q_ptr;
QObject *parent;
QObjectList children;

uint isWidget : 1;
uint blockSig : 1;
uint wasDeleted : 1;
uint isDeletingChildren : 1;
uint sendChildEvents : 1;
uint receiveChildEvents : 1;
uint isWindow : 1; //for QWindow
uint deleteLaterCalled : 1;
uint unused : 24;
int postedEvents;
QDynamicMetaObjectData *metaObject;
QMetaObject *dynamicMetaObject() const;

// 调试模式下的配置,例如检查父子循环的警告深度
#ifdef QT_DEBUG
enum { CheckForParentChildLoopsWarnDepth = 4096 };
#endif
};

QObjectData类存储了接口对象、父对象、子对象链表、元对象及一些标志位(如事件处理、对象类型等)。

分类 属性 描述
对外的接口 QObject *q_ptr; 指向与此对象关联的 QObject 接口类对象的指针
对象管理 QObject *parent;
指向此对象的父对象(父对象被销毁时,其所有子对象也会被销毁)
QObjectList children; 存储此对象的子对象列表
uint wasDeleted : 1;
是否已被 delete(防止多次delete对象)
uint isDeletingChildren : 1; 是否正在 delete 子对象
uint deleteLaterCalled : 1; 是否调用了 deleteLater(),该方法将此对象标记为稍后删除
事件和信号处理 uint blockSig : 1; 是否处于信号阻塞(阻止信号发送)
uint sendChildEvents : 1;

是否将事件消息发送给子对象
uint receiveChildEvents : 1; 是否接收来自子对象的事件消息
int postedEvents; 存储与此对象相关联的已发布事件的数量或计数
对象类型 uint isWidget : 1; 是否为 QWidegt
uint isWindow : 1; 是否为 QWindow
元对象 QDynamicMetaObjectData *metaObject;
指向动态元对象数据的指针
QMetaObject *dynamicMetaObject() const; 返回与此对象关联的动态元对象
保留位 uint unused : 24; 未使用的标志位,用以对齐和保持类大小