qt - QMetaObject 

了解元对象,需要先大概了解下元对象系统,可以看一下我这篇文章

https://blog.csdn.net/tuan8888888/article/details/113837962

元对象

qt 官方说明

The QMetaObject class contains meta-information about Qt objects.

The Qt Meta-Object System in Qt is responsible for the signals and slots inter-object communication mechanism, runtime type information, and the Qt property system. A single QMetaObject instance is created for each QObject subclass that is used in an application, and this instance stores all the meta-information for the QObject subclass. This object is available as QObject::metaObject().

This class is not normally required for application programming, but it is useful if you write meta-applications, such as scripting engines or GUI builders.

简单总结,

1、元对象系统,是qt 信号和槽内部对象交互的系统,运行类型信息,属性系统

2、会被每一个QObject 子类创建一个QMetaObject  实例,用来保存元信息。

3、在使用脚本引擎和GUI的builders 的应用是非常有用的

大概介绍了做什么用,但对于不太了解qt机制的同学来说还是不太清晰。接下来我结合代码来具体看看QMetaObject  可以做什么用,他和QObject的关系是什么。

 

和QObject的关系

想了解QMetaObject  先来看一下和QObject 的关系,根据官方的说明,我们知道在QObject的子类中会创建一个QMetaObject的实例,那我们看一下在什么地方保存的。

在QObject的类中,有一个静态的成员变量staticQtMetaObject 类型是QMetaObject,说明QMetaObject 是 QObject 的成员。

 

protected:
    QScopedPointer<QObjectData> d_ptr;

    static const QMetaObject staticQtMetaObject; //静态成员变量
    friend inline const QMetaObject *qt_getQtMetaObject() Q_DECL_NOEXCEPT;

    friend struct QMetaObject;
    friend struct QMetaObjectPrivate;

//qt_getQtMetaObject的定义

inline const QMetaObject *qt_getQtMetaObject() Q_DECL_NOEXCEPT
{ return &QObject::staticQtMetaObject; }

Q_OBJECT

在再说元对象的时候,不得不说一下 Q_OBJECT 这个宏,大家都知道,如果需要使用信号槽,只继承QObject是不够。还需在类中加上一个Q_OBJECT宏。

下面是宏的定义,在代码中定义了一下成员变量,尤其我们比较关心的元对象,定义了一个静态的成员变量staticMetaObject,上面QObject的元对象名称(staticQtMetaObject)不一样的,少了一个Qt。而每一个子类都有一个各自的元数据。

1、大家有没有想到为什么是静态的呢ÿ

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值