QObject源码分析

本文详细剖析了QObjectData和QObjectPrivate的结构,包括对象的父子关系、信号槽连接、事件处理、用户数据等关键特性,揭示了Qt事件驱动机制的基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 *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 **);
   
    /*信号槽
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值