Qt 实现类反射机制
2015-04-25 19:22
239 查看
在java语言中,可以使用getObject(String)函数,从类型直接构建新的对象。
而在C++中是没有这种机制的,Qt虽然提供了元对象机制,但只可以获取对象的类名,不能反向构建。
这个问题我在百度上找了很多,但都没有满意的答案,索性翻出去google一下,终于找到了解决方法。
原文地址: http://www.mimec.org/node/350
代码如下:
调用方法:
首先要注册你的class:(必须继承QObject)
反射构建一个新对象:
作用:利用反射机制可以做很多事,例如,可以将反射与Qt的property相结合,实现hibernate框架。
而在C++中是没有这种机制的,Qt虽然提供了元对象机制,但只可以获取对象的类名,不能反向构建。
这个问题我在百度上找了很多,但都没有满意的答案,索性翻出去google一下,终于找到了解决方法。
原文地址: http://www.mimec.org/node/350
代码如下:
objectfactory.h
#include <QByteArray> #include <QMetaObject> #include <QHash> #ifndef OBJECTFACTORY_H #define OBJECTFACTORY_H class ObjectFactory { public: template<typename T> static void registerClass() { constructors().insert( T::staticMetaObject.className(), &constructorHelper<T> ); } static QObject* createObject( const QByteArray& className, QObject* parent = NULL ) { Constructor constructor = constructors().value( className ); if ( constructor == NULL ) return NULL; return (*constructor)( parent ); } private: typedef QObject* (*Constructor)( QObject* parent ); template<typename T> static QObject* constructorHelper( QObject* parent ) { return new T( parent ); } static QHash<QByteArray, Constructor>& constructors() { static QHash<QByteArray, Constructor> instance; return instance; } }; #endif // OBJECTFACTORY_H
调用方法:
首先要注册你的class:(必须继承QObject)
ObjectFactory::registerClass<MyObject>();
反射构建一个新对象:
MyObject* object = (MyObject*)ObjectFactory::createObject( "MyObject" );
作用:利用反射机制可以做很多事,例如,可以将反射与Qt的property相结合,实现hibernate框架。
相关文章推荐
- Java实现Qt的SIGNAL-SLOT机制(保存到Map中,从而将它们关联起来,收到信号进行解析,最后反射调用)
- qt 信号,槽及反射机制的实现原理 (记录 gui programing with qt 4)
- C++反射机制的实现
- 番外 01:Spring IoC 实现原理简析,Java的反射机制,通过类名创建对象
- PHP中使用反射机制实现动态代理
- PHP 反射机制实现动态代理的代码
- 利用Java的反射与代理机制实现IOC
- c++实现反射机制(两篇)
- 用反射机制实现对数据库数据的增、查例子
- PHP使用反射机制实现查找类和方法的所在位置
- Unreal Engine 4 反射机制的实现
- Android反射机制实现与原理
- Android反射机制实现与原理
- 12 qt的反射机制应用
- C++反射机制的实现
- 利用反射机制实现XML-RPC
- 深入Qt 学习 -- 反射机制(比较简单清楚)
- 杂货边角(8):C++实现反射机制
- JAVA 反射机制实现 reflect