您的位置:首页 > 编程语言 > Qt开发

QT根据类名动态创建类对象

2014-06-26 11:10 344 查看
.h文件

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 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: