让MyObject继承自QObjectMyObject::staticMetaObject.newInstance()构造函数前需加上Q_INVOKABLE 首先 有一个基类 可以使用 QObject, 这里使用 ParserC/C++ code class Parser { public: virtual void parse() = 0; virtual ~Parser() {}; };然后是两个子类 继承于基类C/C++ code class Parser1 : public Parser { public: Parser1() { qDebug() 再写一个 工厂 函数 C/C++ code void factory( const char* parserName ) { int id = QMetaType::type( parserName ); if (id != -1) { Parser *parser = static_cast ( QMetaType::construct( id ) ); parser->parse(); delete parser; } }调用如下C/C++ code int main ( int argc, char* argv[] ) { qRegisterMetaType("Parser1"); qRegisterMetaType("Parser2"); qDebug() 下面是运行结果###### Trying create Parser1 Parser1::Parser1() Parser1::parse() Parser1::~Parser1() ###### Trying create Parser2 Parser2::Parser2() Parser2::parse() Parser2::~Parser2() 使用列表其实就是自己实现类似qRegisterMetaType的功能而已,可以这样:C/C++ code class ObjectFactory { private: QHash metaObjects; public: template void registerObject() { metaObjects.insert( T::staticMetaObject.className(), &(T::staticMetaObject) ); } QObject *createObject( const QByteArray &type ) { const QMetaObject *meta = metaObjects.value( type ); return meta->newInstance(); } };这样使用:C/C++ code ObjectFactory factory; factory.registerObject(); MyObject* obj = static_cast(factory.createObject("MyObject"));