在程序中嵌入 CTK 插件框架
来源:互联网 发布:hadoop编程 编辑:程序博客网 时间:2024/06/14 02:03
简述
如果已经创建了一个应用程序,如何将 CTK 插件框架嵌入其中呢?
关于 CTK 插件框架的使用,主要分为以下几步:
- 初始化并启动插件框架:由
ctkPluginFramework::init()
和ctkPluginFramework::start()
完成 - 获取上下文:由
ctkPluginFramework::getPluginContext()
完成 - 安装插件:由
ctkPluginContext::installPlugin()
完成,与此同时,会返回一个ctkPlugin
对象。 - 启动插件:由
ctkPlugin::start()
完成 - 获取服务引用:由
ctkPluginContext::getServiceReference()
完成 - 获取指定
ctkServiceReference
引用的服务对象:由ctkPluginContext::getService()
完成 - 调用服务
- 简述
- 使用 CTK 插件框架
版权所有:一去丶二三里,转载请注明出处:http://blog.csdn.net/liang19890820
使用 CTK 插件框架
关于如何编写 CTK 插件,请参考:创建 CTK 插件(CMake) 。下面,来演示如何使用 CTK 插件框架来获得特定的服务。
创建一个 Qt 控制台应用程序,.pro
内容如下:
QT += coreQT -= guiTARGET = LoadCTKPluginCONFIG += consoleTEMPLATE = appLIBS += -L$$PWD/Libs -lCTKCore -lCTKPluginFrameworkINCLUDEPATH += \ $$PWD/../../CTK-master/Libs/Core \ $$PWD/../../CTK-master/Libs/PluginFrameworkSOURCES += main.cpp
由于 CTKPluginFramework 依赖于 CTKCore 模块,所以也需要将其添加进来。
按照上述流程,main.cpp
写起来会就容易很多:
#include <QCoreApplication>#include <QtDebug>#include <ctkPluginFrameworkFactory.h>#include <ctkPluginFramework.h>#include <ctkPluginException.h>#include <ctkPluginContext.h>#include "Testing/FrameworkTestPlugins/auth_plugin/auth_plugin_service.h"const QString c_strPluginPath = "E:/CTK-Examples/LoadCTKPlugin/plugins/libauth_plugin.dll";int main(int argc, char *argv[]){ QCoreApplication app(argc, argv); ctkPluginFrameworkFactory frameWorkFactory; QSharedPointer<ctkPluginFramework> framework = frameWorkFactory.getFramework(); try { // 初始化并启动插件框架 framework->init(); framework->start(); qDebug() << "CTK Plugin Framework start ..."; } catch (const ctkPluginException &e) { qDebug() << "Failed to initialize the plugin framework: " << e.what(); return -1; } // 获取插件上下文 ctkPluginContext* pluginContext = framework->getPluginContext(); try { // 安装插件 QSharedPointer<ctkPlugin> plugin = pluginContext->installPlugin(QUrl::fromLocalFile(c_strPluginPath)); // 启动插件 plugin->start(ctkPlugin::START_TRANSIENT); qDebug() << "Plugin start ..."; } catch (const ctkPluginException &e) { qDebug() << "Failed to install plugin" << e.what(); return -1; } // 获取服务引用 ctkServiceReference reference = pluginContext->getServiceReference<AuthPluginService>(); // 获取指定 ctkServiceReference 引用的服务对象 AuthPluginService* authService = qobject_cast<AuthPluginService *>(pluginContext->getService(reference)); if (authService != Q_NULLPTR) { // 调用服务,进行认证 bool isLogin = authService->login("root", "123456"); if (isLogin) { qDebug() << "Login successfully"; } else { qDebug() << "Login failed"; } } return app.exec();}
ctkPluginContext
是框架内一个插件的执行上下文,该上下文用于授予对其他方法的访问权,以便插件可以与框架进行交互。
ctkPluginContext
提供的方法允许插件:
- 订阅由框架发布的事件
- 使用
Framework service registry
注册服务对象 - 从
Framework service registry
检索ServiceReferences
- 为引用的服务获取和发布服务对象
- 在框架中安装新的插件
- 获取框架中安装的插件列表
- 获得一个插件的
ctkPlugin
对象 - 为(由框架为插件提供的)持久存储区域中为文件创建 QFile 对象
由此可见,ctkPluginContext
在 CTK 插件框架中占据着至关重要的位置。
阅读全文
0 0
- 在程序中嵌入 CTK 插件框架
- CTK 插件框架介绍
- CTK 插件框架介绍
- ctk插件框架的使用
- 基于ctk框架的插件的基本格式
- 在WPF程序中嵌入Win32程序。
- 在ubuntu14.04LTS下编译CTK插件
- (转)在网页中嵌入插件
- 在浏览器中嵌入vlc插件
- ctk加载插件
- 一个服务程序框架,并在vc6.0win32控制台工程中嵌入manifest使用uac
- CTK框架介绍
- CTK框架使用
- 在C++程序中嵌入Python
- perlembed - 在 C 程序中嵌入 perl
- 如何 在C 程序中嵌入Perl
- 如何在C++中嵌入JAVA程序
- 在Android中嵌入C语言程序
- linux基础(十五)自动装系统和lftp配置
- 专题模块phpcms
- ArrayList中的实现原理以及实现线程安全
- phpstorm|webstorm配置ES6语法支持和vue.js语法支持
- 数字证书文件格式(cer和pfx)的区别
- 在程序中嵌入 CTK 插件框架
- idea新建ssm的maven项目 已经idea的破解
- 错误UnicodeDecodeError: 'ascii' codec can't decode byte
- HTML 整体缩放
- PHP 数组转JSON对象 然后在js 里输出
- Java中的文件File类
- python 安装PIL
- c++11多线程编程(六):事件处理
- OPNET 无法打开包括文件"string.h":No such file or directory