【CTK】基于C++和Qt的CTK框架搭建和插件开发

CTK基础

Common Toolkit:支持生物医学图像计算的公共开发包。

参考:
http://www.commontk.org/
https://github.com/commontk

CTK模块

在设计之初 CTK 针对医学成像和建模领域,包含的内容很多,Plugin Framework、Widgets、DICOM......可以选择对自己有用的模块,当前CTK的主要范围主题包括:

(1) DICOM

包含Qt小部件,可以轻松地建立服务器连接,并发送查询和查看结果。DCMTK用作底层工具包。

(2) Widgets

用于生物医学成像应用的Qt Widgets控件集合库。

(3)Plugin Framework

CTK Plugin Framework 同时借鉴了 OSGi 和 Qt Creator 的思想。

作为 CTK 的核心,CTK Plugin Framework 实现了几乎完整的 OSGi 框架 API,所以只要有模块化需求,完全可以在任何 C++ 项目中使用 CTK。

CTK插件框架可以简单地描述为c++的动态组件系统。它直接基于OSGi Release 4 4.2版,其中一些API是受即将发布的4.3版的启发而设计的。像OSGi这样的行业标准为CTK插件框架带来了稳定的API和规范的好处。

CTK 插件相关的 API 非常简单,核心 API 不到 25 个类。这个核心 API 足以编写插件、安装、启动、停止、更新和卸载它们,并且还包含了所有的监听类。

(4)Command Line Interfaces

一种允许以自包含的可执行文件形式编写的算法在多个最终用户应用程序环境中使用而无需修改的技术。

CTK插件

参考: CTK完整教程(OSGI for C++ 实现 C++ Qt 模块化)

CTK插件的设计通常涉及到以下关键部分:接口定义、服务实现和插件激活器。

  • ctk框架核心:框架和插件------框架加载插件,框架和插件之间的通讯使用事件或者信号槽。
  • 框架的核心:框架和需要调用的服务类。
  • 插件的核心:实现类和激活类。

实例代码:

  1. Qt插件开发
  2. https://github.com/myhhub/CTK-project/blob/main/UseCTKWidgets/main.cpp

eg. 插件框架主函数:

cpp 复制代码
#include <QApplication>
#include <QFormLayout>
#include <QVBoxLayout>

#include <ctkCheckablePushButton.h>
#include <ctkCollapsibleButton.h>
#include <ctkColorPickerButton.h>
#include <ctkRangeWidget.h>

int main(int argc, char* argv[])
{
  QApplication app(argc, argv);

  // 可折叠按钮
  ctkCollapsibleButton* buttons = new ctkCollapsibleButton("Buttons");

  // 可勾选按钮
  ctkCheckablePushButton* checkablePushButton = new ctkCheckablePushButton();
  checkablePushButton->setText("Checkable");

  // 颜色拾取器
  ctkColorPickerButton* colorPickerButton = new ctkColorPickerButton();
  colorPickerButton->setColor(QColor("#9e1414"));

  ctkCollapsibleButton* sliders = new ctkCollapsibleButton("Sliders");

  QFormLayout* buttonsLayout = new QFormLayout;
  buttonsLayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
  buttonsLayout->addRow("ctkCheckablePushButton", checkablePushButton);
  buttonsLayout->addRow("ctkColorPickerButton", colorPickerButton);
  buttons->setLayout(buttonsLayout);

  QVBoxLayout* topLevelLayout = new QVBoxLayout();
  topLevelLayout->addWidget(buttons);
  topLevelLayout->addWidget(sliders);

  QFormLayout* slidersLayout = new QFormLayout;
  ctkRangeWidget* rangeWidget = new ctkRangeWidget();
  slidersLayout->addRow("ctkRangeWidget", rangeWidget);
  sliders->setLayout(slidersLayout);

  QWidget topLevel;
  topLevel.setLayout(topLevelLayout);
  topLevel.show();

  return app.exec();
}
相关推荐
草莓熊Lotso3 分钟前
《详解 C++ Date 类的设计与实现:从运算符重载到功能测试》
开发语言·c++·经验分享·笔记·其他
困鲲鲲3 分钟前
CPP多线程2:多线程竞争与死锁问题
c++·多线程·死锁
谱写秋天9 分钟前
Qt 5.5 的安装与配置(使用 VSCode编辑)
开发语言·vscode·qt
_Kayo_6 小时前
node.js 学习笔记3 HTTP
笔记·学习
快乐的划水a9 小时前
组合模式及优化
c++·设计模式·组合模式
星星火柴93610 小时前
关于“双指针法“的总结
数据结构·c++·笔记·学习·算法
艾莉丝努力练剑11 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
Cx330❀12 小时前
【数据结构初阶】--排序(五):计数排序,排序算法复杂度对比和稳定性分析
c语言·数据结构·经验分享·笔记·算法·排序算法
小幽余生不加糖13 小时前
电路方案分析(二十二)适用于音频应用的25-50W反激电源方案
人工智能·笔记·学习·音视频
阿巴~阿巴~13 小时前
深入解析C++ STL链表(List)模拟实现
开发语言·c++·链表·stl·list