目录
1. 前景介绍
CTK(Common Toolkit)是一个用于医学图像处理和可视化应用程序开发的工具集,具有以下特点:
-
基于开源和跨平台的Qt框架: CTK构建在Qt框架之上,这意味着它具有跨平台性,可以在多个操作系统上运行,包括Windows、Linux和macOS。Qt提供了丰富的GUI开发工具,使得开发医学图像处理应用程序变得更加容易。
-
DICOM支持: CTK包括一组用于处理DICOM(数字影像和通信医学)格式的工具和库。DICOM是医学图像处理领域中常用的标准格式,CTK使开发人员能够轻松地读取、解析和处理DICOM图像和数据。
-
可视化组件: CTK提供了一系列用于可视化医学图像的组件,包括用于图像显示、交互和浏览的工具。这些组件可以帮助开发人员创建用户友好的医学图像处理界面。
-
插件架构: CTK支持插件架构,允许开发人员轻松扩展应用程序的功能。你可以通过创建自定义插件来添加特定的图像处理算法或其他功能。
-
社区支持: CTK是一个开源项目,拥有活跃的社区支持。这意味着开发人员可以获得开发文档、示例代码和社区讨论,以解决问题并分享最佳实践。
-
用于医学研究和临床应用: CTK的主要应用领域是医学图像处理和医学研究,因此它专注于满足医学领域的需求。它的特性和工具旨在支持医学研究和临床应用程序的开发。
总之,CTK是一个专注于医学图像处理应用程序开发的工具集,它提供了DICOM支持、可视化组件、插件架构和跨平台性等特点,使开发人员能够更轻松地创建医学图像处理应用程序。它是医学领域中广泛使用的工具之一。
官网编译教程:https://slicer.readthedocs.io/en/latest/developer_guide/build_instructions/windows.html
2. 下载The Common Toolkit (CTK)
ctk源码:https://github.com/commontk/CTK/archive/master.zip
ckt-data源码:https://github.com/commontk/CTKData/archive/master.zip
解压文件得到
3. cmake-gui编译
修改qt版本
configure
设置qt路径,如果Qt5_DIR不存在,则通过Add Entry添加。
configure,然后再添加CTKData_DIR
选择要编译的模块
CTK_ENABLE_PluginFramework
CTK_ENABLE_Widgets
CTK_LIB_PluginFramework
CTK_LIB_Widgets
CTK_PLUGIN_org.commontk.configadmin
CTK_PLUGIN_org.commontk.eventadmin
CTK_PLUGIN_org.commontk.log
CTK_PLUGIN_org.commontk.metatype
取消选中 BUILD_TESTING
具体如下。挨个去搜索,设置
取消superbuild
generate,再点击open project
4. vs2019生成
4.1 release版
生成-》配置管理器,选中INSTALL,生成解决方案。
编译成功,默认的编译成功的文件会放置在c盘下。
lib文件夹下有lib和dll
将PluginFramework源码,CTK 插件相关头文件所在路径(主要因为用到了 service 相关东西),拷贝到编译后的文件夹下。
5. 验证安装
测试安装是否成功,测试程序1:使用CTK自定义空间。
#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();
}
测试程序2:开启插件框架系统。
#include <QApplication>
#include "ctkPluginFrameworkFactory.h"
#include "ctkPluginFramework.h"
#include "ctkPluginException.h"
#include <QDebug>
#include <qwindow.h>
int main(int argc, char* argv[])
{
QApplication a(argc, argv);
a.setApplicationName("CTK_PluginFramework");//给框架创建名称,Linux下没有会报错
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();
qDebug() << e.message() << e.getType();
}
return a.exec();
}