QT根据类名动态创建类对象
2014-06-26 11:10
344 查看
.h文件
CPP文件
结果
Create BaseClass
Create ChildrenClassOne
childrenone
Destroy ChildrenClassOne
Destroy bassclass
Create BaseClass
Create ChildrenClassTwo
childrentwo
Destroy ChildrenClassTwo
Destroy bassclass
class BaseClass { public: BaseClass() { qDebug()<<"Create BaseClass"; } virtual ~BaseClass() { qDebug()<<"Destroy bassclass"; } virtual void test() = 0; }; class ChildrenClassOne: BaseClass { public: void test() { qDebug()<<"childrenone"; } ChildrenClassOne() { qDebug()<<"Create ChildrenClassOne"; } ~ChildrenClassOne() { qDebug()<<"Destroy ChildrenClassOne"; } }; Q_DECLARE_METATYPE(ChildrenClassOne); class ChildrenClassTwo: BaseClass { public: void test() { qDebug()<<"childrentwo"; } ChildrenClassTwo() { qDebug()<<"Create ChildrenClassTwo"; } ~ChildrenClassTwo() { qDebug()<<"Destroy ChildrenClassTwo"; } }; Q_DECLARE_METATYPE(ChildrenClassTwo);
CPP文件
BaseClass *factory(const char* classname) { int id = QMetaType::type(classname); if (id != -1) { BaseClass *baseclass = static_cast<BaseClass*>(QMetaType::create(id)); return baseclass; } } void main() { qRegisterMetaType<ChildrenClassOne>("ChildrenClassOne"); qRegisterMetaType<ChildrenClassTwo>("ChildrenClassTwo"); BaseClass *p = NULL; p = factory("ChildrenClassOne"); p->test(); delete p; p = NULL; p = factory("ChildrenClassTwo"); p->test(); delete p; }
结果
Create BaseClass
Create ChildrenClassOne
childrenone
Destroy ChildrenClassOne
Destroy bassclass
Create BaseClass
Create ChildrenClassTwo
childrentwo
Destroy ChildrenClassTwo
Destroy bassclass
相关文章推荐
- qt 根据选择栏目动态创建控件
- 如何根据字符串动态创建类对象
- Swift3.1-根据类名动态创建类
- 动态创建Frame窗体(根据类名,除T以外的字母)
- C++实现根据类名动态生成类对象
- 如何根据字符串动态创建类对象
- 设计模式学习(十四)————抽象工厂模式(使用Qt框架的反射技术——根据字符串动态创建类来实现)
- Qt根据类名创建对象(元对象反射)
- C++实现反射(根据类名动态创建对象)
- VCL动态创建对象-根据类名创建对象
- 根据字符串动态创建类对象
- ASP.NET中根据XML动态创建使用WEB组件
- ASP.NET中根据XML动态创建并使用WEB组件(一)
- [转载]使用反射技术动态创建类对象(实例代码)
- 根据字符串类名动态创建对象
- ASP.NET中根据XML动态创建并使用WEB组件(三)
- 在.NET上如何根据字符串动态创建控件
- ASP.NET中根据XML动态创建使用WEB组件
- Java反射,根据类名创建带参数的实例
- 根据类名创建实例