最近学习了反射机制的使用方法,网上也有很多这方面的介绍,但初次看起来还是很难了解,不够清晰。经过几天的深入学习,我把我的理解写出来,可能理解有不全对,仅供参考。
什么是反射机制?
反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为反射机制
为什么使用反射?
通过使用字符串,来实现函数的通用化调用,例如你可以利用反射把很多函数放置到数组中,实现一次遍历,全部调用。
怎么实现?
只要拥有元对象(QMetaObject)的类就支持反射!如何拥有元对象?方法很简单:只需继承于QObject或者它的子类(多重继承的话,QObject类应该放在第一个),在头文件的结构声明中写上Q_OBJECT即可!其次要在该类中需要做反射的那个函数前写一个宏Q_INVOKABLE,用于声明。
具体实现: