add shader plugin reg

This commit is contained in:
王劲鹏
2021-02-04 14:55:36 +08:00
committed by osborn
parent a64e8037d6
commit 99afe83b19
17 changed files with 178 additions and 11 deletions

View File

@@ -0,0 +1,46 @@
#include <QByteArray>
#include <QMetaObject>
#include <QHash>
#ifndef OBJECTFACTORY_H
#define OBJECTFACTORY_H
class ObjectFactory
{
public:
template<typename T>
static void registerClass(QString name)
{
constructors().insert(name, &constructorHelper<T>);
}
static bool acquireClass(QString name)
{
return constructors().keys().contains(name);
}
static QObject* createObject(const QString& name, QObject* parent = NULL)
{
Constructor constructor = constructors().value(name);
if ( constructor == NULL )
return NULL;
return (*constructor)(parent);
}
private:
typedef QObject* (*Constructor)(QObject* parent);
template<typename T>
static QObject* constructorHelper(QObject* parent)
{
return new T(parent);
}
static QHash<QString, Constructor>& constructors()
{
static QHash<QString, Constructor> instance;
return instance;
}
};
#endif // OBJECTFACTORY_H