示例#1
0
void PluginManager::loadPlugins()
{
    QList<QPair<QString,QString> > pluginFilenames = loadFilenames();

    foreach (auto filename, pluginFilenames) {
        QPluginLoader loader(filename.second);
        if(!loader.load())
        {
            qWarning()<<"Unable to laod plugin: "<<filename.first;
            continue;
        }

        IPlugin * plugin = qobject_cast<IPlugin*>(loader.instance());
        if(plugin) // Load a plugin
        {
            plugin->getQObject()->setObjectName(filename.first);
            qDebug() << "Load IPlugin " << filename.first;
            QJsonObject meta = loader.metaData();
            QStringList dependancyList = meta.value("MetaData").toObject().value("dependencies").toVariant().toStringList();
            foreach(QString dep, dependancyList) {
                plugin->addDependancy(getObjectByName(dep));
            }
            instance._allObjects.append(qMakePair(filename.first, plugin->getQObject()));
        }