CTK-安裝插件的方式


方式1:使用ctk框架工廠,適用於調用普通的插件

ctkPluginFrameworkFactory frameworkFactory;
QSharedPointer<ctkPluginFramework> framework = frameworkFactory.getFramework();
// 初始化並啟動插件框架
try {
    framework->init();
    framework->start();
    qDebug() << "CTK plugin framework start...";
} catch (const ctkPluginException &e) {
    qDebug() << "CTK plugin framework init err: " << e.what();
    return -1;
}

// 獲取插件服務的contex
ctkPluginContext* pluginContext = framework->getPluginContext();
try {
    // 安裝插件
    QSharedPointer<ctkPlugin> plugin = pluginContext->installPlugin(QUrl::fromLocalFile(pluginPath));
    qDebug() << QString("Plugin[%1_%2] installed...").arg(plugin->getSymbolicName()).arg(plugin->getVersion().toString());
    // 啟動插件
    plugin->start(ctkPlugin::START_TRANSIENT);
    qDebug() << "Plugin start...";
} catch (const ctkPluginException &e) {
    qDebug() << QString("Failed install or run plugin: ") << e.what() << e.getType();
    return -2;
}

// 獲取服務引用

ctkServiceReference reference = pluginContext->getServiceReference<AbsLogService>();
if (reference) {
    // 獲取指定 ctkServiceReference 引用的服務對象
    AbsLogService* service = qobject_cast<AbsLogService*>(pluginContext->getService(reference));
    if (service != Q_NULLPTR) {
        // 調用服務
        service->log("123");
    }
}
else {
    qDebug()<<"reference is null";
}

方式2:使用ctk框架啟動器,適用於需要eventadmin時

QString path = QDir::currentPath() + "/third_libs/ctk/libs";
// 在插件的搜索路徑列表中添加一條路徑
ctkPluginFrameworkLauncher::addSearchPath(path);
ctkPluginFrameworkLauncher::start("org.commontk.eventadmin");
// 獲取插件上下文
ctkPluginContext* context = ctkPluginFrameworkLauncher::getPluginContext();
// 啟動插件 BlogEventHandler
try {
    QSharedPointer<ctkPlugin> plugin = context->installPlugin(QUrl::fromLocalFile(pluginPath1));
    plugin->start(ctkPlugin::START_TRANSIENT);
    qDebug() << "BlogEventHandler start ...";
} catch (const ctkPluginException &e) {
    qDebug() << "Failed to start BlogEventHandler" << e.what();
}
// 啟動插件 BlogManager
try {
    QSharedPointer<ctkPlugin> plugin = context->installPlugin(QUrl::fromLocalFile(pluginPath2));
    plugin->start(ctkPlugin::START_TRANSIENT);
    qDebug() << "BlogManager start ...";
} catch (const ctkPluginException &e) {
    qDebug() << "Failed to start BlogManager" << e.what();
}
// 停止插件
ctkPluginFrameworkLauncher::stop();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM