QT之Meta-Object

QT的Meta-Object System提供信号与槽机制、运行时类别信息和动态属性系统。元对象系统基于QObject类、Q_OBJECT宏及Meta-Object编译器moc。moc工具处理包含Q_OBJECT宏的类,生成元对象代码。文章介绍了类属性的定义与使用,动态属性的创建和应用,以及元对象的继承、cast操作和自定义类型的注册。
摘要由CSDN通过智能技术生成

简述

元对象系统(Meta-Object System)提供了:
1 信号与槽机制可用于对象间通信
2 运行时类别信息
3 动态属性系统。

元对象系统基于三个方面:
1 QObject类:为每个具体对象提供了一个公共的元对象系统的基类(根类)。
2 Q_OBJECT宏: 在类的私有部分声明这个宏可以启用元对象特性,例如:动态属性、信号与槽。
3 Meta-Object编译器(moc): 为每个QObject子类生成必要的代码来实现元对象特性。

moc工具会读取C++源文件,如果发现有包含Q_OBJECT宏的类声明,就生成另外一个包含这些类的元对象代码的C++源文件。(这就是QT自定义的关键字如何实现的,即通过文本扫描,将自定义的关键字根据自定义的规则进行编译,编译成纯C++代码)生成的源文件要么在类源文件里用#include包含,或者(更常见)与类的实现代码直接进行编译连接。

类属性

1 定义:

	//类的附加信息,写在类的声明中,本质就是个宏定义罢了
	//通过一对pair即name和value来定义,为class提供额外信息说明
    Q_CLASSINFO("Author","Wang")
    Q_CLASSINFO("Company","SWU")
    Q_CLASSINFO("Team","Faze")

2 使用:见元对象

动态属性

1 创建:

//动态属性:其与c++成员变量最大的区别在于,能够在运行期间动态地往类中添加新的成员(属性)
    //定义方法1:不关联,直接新建一个属性(指定类型和名称);可以指定类中写好的函数作为read/set等多个用途;一般还是习惯使用setproperty和property函数来读写属性
    //READ表示读取property时使用哪个函数的返回值作为读取值,WRITE则是改写的函数(即意要读写此属性需通过Read和Write函数)
    //NOTIFY表示property的值改变后触发某个指定信号,FINAL表示子类不继承此property
    //CONSTANT则表示此property只可读,仅提供一个READ接口
    Q_PROPERTY(bool sth READ getSth WRITE setSth NOTIFY sthChanged FINAL)
    Q_PROPERTY(int sth2 READ sth2 CONSTANT)
    //定义方法2:绑定到指定的成员变量,访问它就相当于访问绑定到的成员
    Q_PROPERTY(QString name MEMBER name)
    //定义方法3:在运行(类外)定义动态属性,必须要指定对象、属性名称以及属性值(可以是任意类型)
    broky=new QPerson(20,"Helvijs");
    broky->setProperty("id","Broky");

2 使用:

	//更改动态属性和定义新的动态属性方法一致
    broky->setProperty("id","Proky");
    //按名称读取动态属性,动态属性可以转换为任意类型
    QString hisName=p->property
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值