CTK 是什么 CTK 为支持生物医学图像计算的公共开发包,其全称为 Common Toolkit。 但若仔细看,你会发现这个设计很有意思,像一群人环绕着“CTK”三个字母,举着双臂对着它欢呼。简洁、巧妙,在图形上给予了 CTK 最鲜活的注解,疯狂打 Call 吧! CTK 基于哪些技术 在 CTK 整个开发过程中,它使用了一些非常棒的技术。 BSD 许可 CTK 采用 BSD 形式的许可,对用户不做任何限制并允许商业使用。 C++ CTK 的主要语言是 C++。 GitHub CTK 的所有代码均托管于 Github。 注意:CTK 的代码是在 Apache 2.0 下授权的。这意味着,可以使用 CTK 代码进行学术、商业或其他目的,而无需支付许可费。
基于Qt的CTK框架的使用 QT的plugin插件的创建方式 在介绍CTK框架的使用方法之前我们首先介绍一下QT的plugin插件的创建方式。 CTK系统可以管理这些插件, 当需要的时候就可以直接从系统中获取相应的插件。 然后用想用的抽象接口指向这个插件就可以使用了。 技术框架 插件框架采用分层, 模块化管理。 CTK系统可以管理插件的生命周期, 在运行时动态加载和卸载插件从而实现软件用的热插拔。 ctk框架就像是一个仓库来存储所有的插件, 要使用的时候只需要从仓库里拿出相应的插件实例就可以。 基于CTK框架的插件的编写规则 1 interface接口定义 首先是interface接口我们以后称之为service(服务) 该类是抽象类, 在c++里叫做纯虚类(如果不知到自己搜索 这里不做过多的介绍 系统供我们获取该类的实现类实例 } void ControlPlugin_Plugin::init() { qDebug()<<"hello"; } 3 ctkPluginActivator (ctk
: D:/study/framework/CTK/ctk/build2/CTK-install/lib/ctk-0.1/CMake/CTKExports.cmake -- Installing: D:/ study/framework/CTK/ctk/build2/CTK-install/lib/ctk-0.1/CMake/CTKExports-debug.cmake -- Installing: D: /study/framework/CTK/ctk/build2/CTK-install/lib/ctk-0.1/CMake/CTKConfig.cmake -- Installing: D:/study step for 'CTK' [ 55%] Completed 'CTK' [100%] Built target CTK d:\study\framework\CTK\ctk\build2> 查看编译安装结果 d:\study\framework\CTK\ctk\build2>tree /f d:\study\framework\ctk\ctk\build2\CTK-install 卷 Data 的文件夹
上篇文章写的如何生成一个简易ctk动态库ctk编译 极简版_从无~到有的博客-CSDN博客 这篇文章写如何简易的使用 交代路径下图 上篇文章已经写过关于ctk动态库如何生成下面介绍一下各个文件夹: CTK 文件夹:是ctk的源码 ctkWork文件夹:用vs编译生成的ctk插件 myCTK文件夹:是网上找的一个调用ctk动态库的cpp,只有一个main.cpp和一个test.pro ctkInclude.pri :是我们执行ctk的时候所需要ctk的头文件路径 test.pro的内容 QT += core TARGET = test TEMPLATE = app LIBS += -L$$PWD/ /ctkWork/CTK-build/bin/Debug/ -lCTKCore -lCTKPluginFramework include(.. /Libs/PluginFramework \ $$PWD/ctkWork/CTK-build/Libs/PluginFramework \ $$PWD/CTK/Libs/Core \
事件管理机制 4.1、框架事件 4.2、插件事件 4.3、服务事件 4.4、自定义事件 二、CTK Plugin Framework架构及插件的使用 1、CTK Plugin Framework使用流程 2、创建CTK插件 3、CTK插件框架使用实例 参考 ---- CTK Plugin Framework简介 框架简介 1.1、简介 CTK Plugin Framework设计参考了OSGi(Open CTK Plugin Framework框架的分层模型如下: Figure 1 CTK Plugin Framework框架层次模型 Plugins(插件):由开发人员创建的CTK 2.1、Plugin System CTK Core依赖于QtCore模块,因此CTK Plugin Framework基于Qt Plugin System。 二、CTK Plugin Framework架构及插件的使用 1、CTK Plugin Framework使用流程 2、创建CTK插件 3、CTK插件框架使用实例 参考 https://commontk.org
1.把release版本和debug版本的CTK库文件拷贝到QT的bin目录下 2.把release版本下的CTKWidgetsPlugins拷贝到qt plugins目录下 Qt designer 中就可以看到集成的CTK通用插件了 3.建立一个qt gui程序,设置ctk的链接目录 设置CTK的dll目录 设置CTK的头文件目录 设置CTK的lib路径 4.在qt designer中拖两个 ctk,编译运行,可以在调试模式下使用 最开始编译CTK的时候,明明已经在QT designer集成了CTK插件,一旦使用拖拽,调试运行就会出现程序崩溃(程序可以编译通过)。 崩溃原因是unhandled exception at 0x**** (qtcore.dll),这个一开始困扰了很久,后来发现是debug模式下面加载了release版本的库的原因,所以我们在编译CTK
转(http://blog.csdn.net/xinqidian2015/article/details/50537325) CTK插件框架可以简单的描述为C++的动态组件系统 Design CTK Plugins CTK插件是他的核心,一个基于Qt Plugin系统的共享库。另外在CTK库中默认被隐藏的符号跨所有平台。第一步模块化是关于那些保持局部并且不共享。 CTK插件通常值共享符号(类和函数)来支持CTK的服务模型。 Services 一个在C++中的协作模型通常会使用工厂模式。不同的工具包使用不同的模式和API来访问这样的工厂。 这些问题的一种解决方案是CTK服务注册.一个插件可以创建一个对象并且使用CTK服务在一个或多个接口中注册它。另外的插件可以向registry要求所有的使用特定接口注册的服务列表。 Versioning 在CTK插件框架中所有的插件都有版本号并且只有插件,可以连接在一起合作 Simple CTK插件API是十分简单的。核心API少于25个类。
CTK插件框架简介 CTK Plugin Framework是用于C++的动态组件系统,以OSGi规范为模型。在此框架下,应用程序由不同的组件组成,遵循面向服务的方法。 ctk是一个开源项目,Github 地址:https://github.com/commontk。 git clone git://github.com/commontk/CTK.git 同时,在ctk同级目录下,创建个ctk-superbuild目录,用来存放后续编译生成的文件。 点击确认后默认首次generate会报错,因为默认CTK配置的Qt版本为QT4,需要做更改。 选择参数配置中的CTK项,将CTK_QT_VERSION从4改成5。 另外,把CTK下面CTK_ENABLE_PluginFramework也改为打开。
CTK环境搭建 1 下载相关文件 下载Cmake:https://cmake.org/ 下载ctk源码:https://github.com/commontk/CTK 2 编译CTK 2.1 cmake 打开cmakelist ctk源码下载完之后在当前文件夹下新建build目录。 下载好之后解压到CTK源文件目录下。 、CTKPluginFramework、CTK_PLUGIN_org.commontk.eventadmin、 CTK_PLUGIN_org.commontk.log、CTK_PLUGIN_org.commontk.metatype 编译完之后或许有些错误但库文件应该已经生成了,在C:\SoftWare\CTK-master\Build\CTK-build\bin\Debug目录下就有相应的库文件了。
安装Git,我们通过它来下载CTK的源码。 2. 安装CMake,我们用它来生成vs下的sln解决方案文件。 相关站点: 1. CTK的官网:http://www.commontk.org/index.php/Main_Page 2. CTK源码下载地址:https://github.com/commontk/CTK 编译步骤: 注意:下面目录中出现的文件,由于是我已经编译过的,因此可能会和刚下载的多出很多文件,在这里仅说明流程是怎样的 Git下载地址:https://github.com/commontk/CTK.git 。 2. 最终,在CTK/CTK-build/bin/debug/下即可生成最终的CTKCore.dll和CTKPluginFramework.dll文件以及对应的lib文件,再利用头文件就可以构建基于插件开发的系统
CTK Plugin Framework: Introduction The CTK Plugin Framework can shortly be described as a dynamic component CTK 插件框架可以简要的描述为一个c++动态组件系统。 CTK Plugins usually only share symbols (classes and functions) to support the CTK services model. One solution to these issues is the CTK service registry. Real World The CTK Plugin Framework is dynamic.
序 使用CTK框架开发有大半年了,就实际应用上来说框架还比较可靠,但网上资料很少。 而刚接触时项目已经有了相当大的体量,与业务等其他逻辑混淆,现在单独把ctk框架部分抽离出来做个总结分享,避免后来的人走弯路。 该系列介绍简单的ctk框架构建的方法,具体架构可根据自身项目设计,开发环境为macOS High Sierra,QtCreator 5.10.0。 ctk框架插件 CTK源码可以从GitHub上下载,地址 https://github.com/commontk/CTK,然后使用cmake编译出与系统版本相应的动态库。 的头文件包括: GitHub源码/Libs/PluginFramework/*.h GitHub源码/Libs/PluginFramework/service/*.h, Xcode编译目录/ctk-build
1.下载源码https://github.com/commontk/CTK 2.配置Cmake选项 编译环境选择vs2017 64bit 出现第一个error,根据出现的error我们添加qt5的路径 ,继续configure: 勾选advanced,作以下配置: Build_testing 取消 CTK_ENABLE_WIDIGETS 勾选 CTK_LIB_VISUALIZATION/VTK/CORE 勾选 CTK_LIB_VISUALIZATION/VTK/WIDGETS 勾选 CTK_LIB_WIDGETS 勾选 以上设置完成继续configure,出现下图,我们勾选CTK_LIB_VISUALIZATION PROJECT,右键all_build并build 4.继续打开CTK工程下的CTK_BUILD目录,我们会发现该目录下还有一个CTK.sln,我们需要继续编译它 5.上图中的CTK.sln 打开结果如下图 如果我们直接用build整个项目,那么生成的CTK在debug版本下面是不带有d后缀的,我们要让debug版本下生成的dll全部带有d后缀 6.修改debug模式下所有CTK前缀的工程项目属性
CTK的编译 CTK主要是一个基于QT的GUI开发框架, 用于医学成像、外科导航等相关的项目。典型的应用就是3D Sclier。 在医学图像的软件开发中,ctk通常和vtk、ITK等开源库一起使用。 一些编译的问题 在CTK中编译QT的5.10等较高版本时可能遇到的问题: (1)VTK编译错误 CTK默认下载的VTK版本比较旧,编译过程可能会遇到C++语法方面的错误,这时可以更改Git中下载的VTK ctk(PythonQt)不支持完全用过python编写应用程序,参考3D Slicer。 3D slicer中的ctk的应用:youtube上的 3D Slicer QT CTK and GUI 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/135028
用ctk加载插件有两种方法,第一种需要自己创建ctkPluginFramework: //ctk plugin ctkPluginFrameworkFactory* ctkFrameWorkFactory /liborg_ctk_example.dll")); Plugin->start(ctkPlugin::START_TRANSIENT); 还有一种比较简单的利用ctkPluginFrameworkLauncher ctkPluginFrameworkLauncher::start(pluginSymbolicName); //pluginSybolName为插件的符号名,比如在MF文件中的 Plugin-SymbolicName: org.ctk.example ,这里就是“org.ctk.example” } catch (ctkPluginException &e) { std::cout << "Error in " << pluginSymbolicName
CTK Plugin Framework 基本原理 1 CTK Plugin Framework是什么 CTK Plugin Framework 技术是面向 C++ 的动态模型系统。 简单的说来CTK Plugin Framework就是一个框架,用于管理DLL插件,同时也提供DLL插件之间的通讯服务。 元数据:CTK Plugin Framework中特有的,DLL要应用其中必须要有。用于描述DLL库的文件。 2.2 Service Layer层 提供了一套发布—订阅机制。
“ CTK Plugin Framework 技术是面向 C++ 的动态模型系统。该系统允许插件之间的松散耦合,并且提供了设计良好的方式来进行功能和数据的交互。 体系架构 CTK Plugin Framework 设计受到了 OSGi(Java 的动态组件系统)的极大启发,并且它提供了一种能让应用程序(动态地)由许多不同的(可重用)组件组成的开发模型。 插件 Plugin 是 CTK Plugin Framework 的核心,模块化特性在这一层得到了很好的实现。那么,究竟什么是 Plugin? 对于可选信息(例如:Plugin-Name、Plugin-Vendor 等),CTK Plugin Framework 甚至会无视这些内容。 一个插件可以创建一个对象,并在一个或多个接口(通常是一个只有纯虚方法的 C++ 类)下使用 CTK Service Registry 注册它。
1. eventadmin库编译 CTK Plugin Framework下插件间通信是通过事件管理机制实现的,其代码位于CTK/Libs/PluginFramework/service/event目录下 ,使能事件管理机制,首先要在编译CTK的时候选择生成org.commontk.eventadmin库。 如下图所示,打开cmake-gui,搜索plugin,然后把几个相关的库勾选上,重新编译CTK。 2. eventadmin库环境配置 eventadmin插件属于ctk库自带的插件,可以通过如下方式启动。 } } 在源码中,可以通过宏转字符串的方式获取CTK_PLUGIN_LIBS指向的路径。
/CTK/Libs/Core \ += E:/lwks/CTK/Libs/PluginFramework if (contains(DEFINES,WIN64)){ # for += E:/lwks/ctk-vsbuild/CTK-build/Libs/Core }else{ # for mingw compiler INCLUDEPATH += E:/lwks/ctk-superbuild /CTK-build/Libs/PluginFramework INCLUDEPATH += E:/lwks/ctk-superbuild/CTK-build/Libs/Core } 1.2 创建插件类 += E:/lwks/ctk-vsbuild/CTK-build/Libs/PluginFramework INCLUDEPATH += E:/lwks/ctk-vsbuild/CTK-build += E:/lwks/ctk-superbuild/CTK-build/Libs/Core LIBS += -LE:/lwks/ctk-superbuild/CTK-build/bin -lCTKCore
问题原因: VMware vSphere环境中, NBU设定的虚机整机备份CTK参数产生的备份CTK文件是独占的,不是共享的,会引起虚机RAC不能正常读取CTK而导致启动异常。