QT元对象

1,QT元对象系统简介

Qt的信号槽和属性系统具有运行时查询对象信息的能力,但是C++查询对象信息的能力比较有限,仅仅能够通过RTTI的typeid和dynamic_cast关键字来实现。

QT拓展了C++ 的这种能力,但是没有采用C++标准库的RTTI,而是提供了更为强大的元对象(meta object)机制,基于元对象,可以列出对象的方法和属性列表,并且能够获取有关对象的所有信息如参数类型。

QT中的元对象系统全称为Meta Object system,是一个基于C++标准库的扩展,为QT提供了一下信号与槽机制,实时类型信息,动态属性系统。

1)QObject类

作为每一个需要利用元对象系统的类的基类。

2)Q_OBJECT 宏

定义在每个类的头文件中,用来启用元对象功能,比如动态属性,信号和槽。

在一个QObject类或者其派生类中,如果没有声明这个宏,调用的metaObject()返回的就是其父类的metaobject对象,导致从类获取的元数据其实是父类的数据,因此,任何从QObject继承的类,都应该声明Q_OBJECT宏

3)元对象编译器MOC

MOC 会分析C++的头文件,如果发现Q_OBJECT宏定义,会动态生成一个moc_  的C++源文件,源文件包含Q_OBJECT的实现代码,会被编译链接到类的二进制代码中,作为类的一部分。

2,元对象的功能

1)信号和槽,用于对象间的通信;

2)QObject::MetaObject()方法,获得与一个类相关联的meta-object

3)QMetaObjcet::className方法,在运行期间返回一个对象的类名,

4)QObject::inherits()方法,用来判断一个对象是不是从一个特定的类派生出来,必须是QObject的派生类

5)QObject::tr()和QObject::trUtf8() 为软件的而国际化翻译字符串

6)Qobject::setProperty()和Qobject::property() 根据属性名动态的设置和获取属性值

7)使用qobject_cast()方法在QObject类之间提供动态转换。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值