.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