/**
*QObject.h
* QObjectData存放着当前对象,父对象,子对象链表,元对象,元对象数据,以及一些标志位
*/
class Q_CORE_EXPORT QObjectData {
public:
virtual ~QObjectData() = 0;
QObject *q_ptr; /*QObject指针*/
QObject *parent; /*父对象指针*/
QObjectList children; /*子对象链表*/
uint isWidget : 1; /*是否为Widget,为1位,0和1*/
uint blockSig : 1; /*是否信号阻塞,为1位,0和1*/
uint wasDeleted : 1; /*是否已经删除,为1位,0和1*/
uint isDeletingChildren : 1; /*是否子对象链表删除,为1位,0和1*/
uint sendChildEvents : 1; /*发送子对象事件,为1位,0和1*/
uint receiveChildEvents : 1; /*接收子对象事件,为1位,0和1*/
uint isWindow : 1; //for QWindow /*是否为Window,为1位,0和1*/
uint unused : 25; /*未使用*/
int postedEvents; /*发布事件*/
QDynamicMetaObjectData *metaObject; /*动态元对象数据*/
QMetaObject *dynamicMetaObject() const; //assert dynamic /*元对象*/
};
/**
*QObject_p.h
*ExtraData结构存放着用户数据,属性名,属性值,定时器运行时间,事件过滤,对象名
*QObjectPrivate存放着QObjectConnectionListVector,向量中存放着链表,链表中存放着信号与槽
*也存放ExtraData,QThreadData,QObjectConnectionListVector
*/
class Q_CORE_EXPORT QObjectPrivate : public QObjectData
{
Q_DECLARE_PUBLIC(QObject)
public:
struct ExtraData
{
ExtraData() {}
#ifndef QT_NO_USERDATA
QVector<QObjectUserData *> userData; /*用户数据*/
#endif
QList<QByteArray> propertyNames; /*属性名*/
QList<QVariant> propertyValues; /*属性值*/
QVector<int> runningTimers; /*定时器运行时间*/
QList<QPointer<QObject> > eventFilters; /*事件过滤链表*/
QString objectName; /*对象名*/
};
typedef void (*StaticMetaCallFunction)(QObject *, QMetaObject::Call, int, void **);
/*信号槽
QObject源码分析
最新推荐文章于 2025-06-20 10:19:23 发布