Qt框架浅析之三 ------ Qt元对象系统(一)

    元对象系统涉及很多方面,比如运行时类信息,属性信息,信号槽等等,但是其中最主要的应该是信号槽,大家也许在处理信号槽的时候都碰到过这么一个问题:为什么我没加Q_OBJECT宏,信号槽就生效不了呢?进入正题:

#define Q_OBJECT \
public: \
    Q_OBJECT_CHECK \
    static const QMetaObject staticMetaObject; \
    virtual const QMetaObject *metaObject() const; \
    virtual void *qt_metacast(const char *); \
    QT_TR_FUNCTIONS \
    virtual int qt_metacall(QMetaObject::Call, int, void **); \
private: \
    Q_DECL_HIDDEN_STATIC_METACALL static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **); \
    struct QPrivateSignal {};

    元对象系统涉及到的主要的实现类:QMataClassInfo, QMetaEnum, QMetaDataReaderControl, QMetaObject, QMetaProperty, QMetaType,我会在之后的博文中介绍这几个类的作用。

    即使是最简单只有一个信号和槽函数的头文件的moc也有接近150行,所以在这里就不贴这些代码,想了解的可以直接对着自己moc出来的cpp查看一下就好,我就直接对着这个宏声明讲了,moc文件中主要是重载了上述宏声明中那四个函数metaObject(), qt_metacast(), qt_metacall(), qt_static_metacall()。(其实信号函数的实现也是放在了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值