Тебе нужно использовать паттерн типа фабричного метода. Кроме того создаваемые классы должны быть унаследованы от одного класса.
enum
{
TYPE_A, TYPE_B, TYPE_C
};
class Base
{
public:
virtual int Type() = 0;
};
class A : public Base
{
public:
virtual int Type() { return TYPE_A; }
};
class B : public Base
{
public:
virtual int Type() { return TYPE_B; }
};
class C : public Base
{
public:
virtual int Type() { return TYPE_C; }
};
Base * CreateObject(int nType)
{
switch (nType)
{
case TYPE_A : return new A;
case TYPE_B : return new B;
case TYPE_C : return new C;
default : return 0;
}
}
for (int i = 0; i < 3; ++i)
{
Base * p = CreateObject(i);
}
Примерно вот так вообщем. Для классов Qt это конечно будет сложнее, если используются абсолютно разные классы. Опиши задачу подробнее, потому что слету ее вряд ли можно решить.