您的位置:首页 > 其它

ctk插件框架的使用

2015-07-27 08:33 627 查看
#include <QApplication>

#include <QString>

#include <QStringList>

#include <QDebug>

#include <QDirIterator>

#include <QFileInfo>

#include <QUrl>

#include <QSharedPointer>

#include "ctkPluginContext.h"

#include "ctkPluginFramework.h"

#include "ctkPluginFrameworkFactory.h"

#include "ctkPluginException.h"

#include "ctkPlugin.h"

#include "ctkServiceReference.h"


#include "test_i.h"


int main(int argc, char *argv[])

{

QApplication app(argc, argv);

QString strPluginPath = QString("%1/plugins").arg(qApp->applicationDirPath());

QStringList lstLibs;

lstLibs << strPluginPath << qApp->applicationDirPath();

qApp->setLibraryPaths(lstLibs);

ctkPluginFrameworkFactory frameworkFactory;

QSharedPointer<ctkPluginFramework> pluginFramework;

pluginFramework = frameworkFactory.getFramework();

try

{

pluginFramework->init();

pluginFramework->start();

}

catch(const ctkPluginException &except)

{

qCritical() << "pluginFramework init failed!";

pluginFramework.clear();

return -1;

}

ctkPluginContext *pluginContext = pluginFramework->getPluginContext();

QDirIterator itPlugin(strPluginPath, QStringList() << "*.dll", QDir::Files);

while(itPlugin.hasNext())

{

QString strPlugin = itPlugin.next();

    try

{

QSharedPointer<ctkPlugin> plugin = pluginContext->installPlugin(QUrl::fromLocalFile(QFileInfo(strPlugin).absoluteFilePath()));

plugin->start(ctkPlugin::START_TRANSIENT);

}

catch(const ctkPluginException *ex)

{

qDebug() << QString("installPlugin %1 failed!").arg(strPlugin);

    return -1;

}

}

ctkServiceReference reference = pluginContext->getServiceReference("MyTest");

MyTest *test = qobject_cast<MyTest *>(pluginContext->getService(reference));

test->test();

return app.exec();

}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: