随笔分类 -  CTK框架学习

摘要:一、项目介绍 1、主要为了在此小型测试项目中用到几乎所有ctk的常用知识: 插件间通信、服务工厂、服务追踪、事件监听、框架封装 2、项目共包含3个插件日志插件:用于模拟将接收的信息存储到日志中【这里只做简单的打印】,并且能够接收信息【主要来自界面插件】 打印插件:根据不同的插件返回提供不同打印服务 阅读全文
posted @ 2020-07-11 22:03 朱小勇 阅读(4616) 评论(1) 推荐(2)
摘要:一、简介 服务追踪:如果想在B插件里使用A服务,可以专门写一个类继承ctkServiceTracker,在这个类里完成对A服务的底层操作,然后在B插件里通过这个类提供的接口来使用回收A服务。 注意ctkServiceTracker和A服务应该是一起的,这里有点像服务工厂。优点就是获取服务的代码简单, 阅读全文
posted @ 2020-07-10 10:36 朱小勇 阅读(1100) 评论(1) 推荐(0)
摘要:CTK一共有三种事件可以监听:框架事件、插件事件、服务事件。但是这些事件只有再变化时才能监听到,如果已经变化过后,进入一个稳定的状态,这时才去监听,那么是无法监听到的。 1、监听接口 主要是ctkPluginContext提供的三个函数: 2、如何使用 可以新建一个专门的服务,专门用于监听CTK的事 阅读全文
posted @ 2020-07-09 10:28 朱小勇 阅读(1184) 评论(1) 推荐(0)
摘要:1、作用 在服务中可以知道是哪个其他插件在使用它; 懒汉式使用服务,需要的时候才new; 厂其他插件使用有服务工厂和使用无服务工的服务,没有任何区别,代码都一样; 可根据需要创建多种实现的服务,就是:多种服务对应一个插件。 2、用打印插件举例 提供三种服务,分别是:直接打印、打印后加3个点、加上时间 阅读全文
posted @ 2020-07-05 04:02 朱小勇 阅读(944) 评论(1) 推荐(0)
摘要:QHash<QString, QString> headers = plugin->getHeaders(); ctkVersion version = ctkVersion::parseVersion(headers.value(ctkPluginConstants::PLUGIN_VERSION 阅读全文
posted @ 2020-07-05 02:18 朱小勇 阅读(432) 评论(0) 推荐(0)
摘要:1、接口类中的Q_DECLARE_INTERFACE 此宏将当前这个接口类声明为接口,后面的一长串就是这个接口的唯一标识。 2、实现类中的Q_INTERFACES 此宏与Q_DECLARE_INTERFACE宏配合使用。 Q_DECLARE_INTERFACE:声明一个接口类 Q_INTERFACE 阅读全文
posted @ 2020-07-03 11:28 朱小勇 阅读(561) 评论(0) 推荐(0)
摘要:零、概述 1、通信主要用到了ctkEventAdmin结构体,主要定义了如下接口: postEvent:类通信形式异步发送事件 sendEvent:类通信形式同步发送事件 publishSignal:信号与槽通信形式发送事件 unpublishSignal:取消发送事件 subscribeSlot: 阅读全文
posted @ 2020-07-03 10:52 朱小勇 阅读(4335) 评论(0) 推荐(0)
摘要:方式1:使用ctk框架工厂,适用于调用普通的插件 ctkPluginFrameworkFactory frameworkFactory; QSharedPointer<ctkPluginFramework> framework = frameworkFactory.getFramework(); / 阅读全文
posted @ 2020-07-03 09:41 朱小勇 阅读(1884) 评论(0) 推荐(0)
摘要:1、 问题: 可以确定环境没有任何问题,但是一运行就这样。 解决: 删掉这个文件夹 2、 在编写插件添加资源文件的过程中,有些教程说前缀需要和工程名一致。经过测试,不是和工程名一致,而是与生成的dll名字一致,也就是TARGET 其他地方,如工程名、 MANIFEST.MF里的符号,都是随便取。 3 阅读全文
posted @ 2020-07-02 19:57 朱小勇 阅读(2411) 评论(2) 推荐(0)
摘要:如何实现依赖 在MANIFEST.MF里,加入元对象: Require-Plugin: FirstPlugin; plugin-version="[0.5,2.0)"; resolution:="mandatory" FirstPlugin:为需要依赖的插件名【就是另一个插件在MANIFEST.MF 阅读全文
posted @ 2020-07-02 17:19 朱小勇 阅读(1046) 评论(0) 推荐(0)
摘要:0、概述 编写插件主要有3个步骤:接口类、实现类、激活类。根据前面写的入门插件【https://www.cnblogs.com/judes/p/13220386.html】,总感觉很难理解,为什么还要在实现类的构造函数里注册服务呢,我们肯定希望把3个步骤的耦合性降低,接口类就只做接口声明,实现类就只 阅读全文
posted @ 2020-07-02 17:12 朱小勇 阅读(903) 评论(0) 推荐(0)
摘要:0、概念 接口就是纯虚函数类,也就是最终的服务的前身; 插件就是实现这个接口类的实现类,所以理论上有多少个实现类就有多少个插件。注意每个插件都有自己的注册器Activator; 服务就是根据接口的实例,每生成一个服务就会调用一次注册器的start。 一句话总结就是:把接口当做类,服务是根据类new出 阅读全文
posted @ 2020-07-01 18:14 朱小勇 阅读(1384) 评论(0) 推荐(0)
摘要:一、生成插件 0、环境说明 编译ctk:Qt5.12.2+MSVC2017_64+Cmake 生成插件:Qt5.12.2+MSVC2017_64+qmake 1、服务类,纯虚类,提供接口 abslogservice.h #ifndef ABSLOGSERVICE_H #define ABSLOGSE 阅读全文
posted @ 2020-07-01 17:25 朱小勇 阅读(2339) 评论(0) 推荐(0)
摘要:MingW编译 一、什么是CTK 总的来说就是一个框架,里面所有的对面如登录界面、日志功能、数据接收功能、解析功能、数据库访问都当做插件的形式,能够有效降低代码间的耦合。 CTK包含好几个核心功能:Plugin Framework、Widgets、DICOM、DICOM Application Ho 阅读全文
posted @ 2020-06-29 12:25 朱小勇 阅读(4379) 评论(2) 推荐(0)