使用 CTKWidgets

来源:互联网 发布:北京中科院理化所知乎 编辑:程序博客网 时间:2024/05/24 06:40

简述

CTKWidgets 包含了一组 Qt 部件,用于生物医学成像应用程序。当然,即使你的程序与医学无关,很多部件也是很有参考意义的。

通过完成 编译 CTK 中的所有步骤,可以看到,生成了很多有用的库,其中就包含 CTKWidgets。

  • 简述
  • CTKWidgets 的构成
  • 使用 CTKWidgets
  • CTKWidgets 测试

版权所有:一去丶二三里,转载请注明出处:http://blog.csdn.net/liang19890820

CTKWidgets 的构成

根据 CTKWidgets 文档 描述,CTKWidgets 主要包含 5 部分:

  • Plans for widgets:收集了所需部件类型的一些想法和示例,包括:通用部件、科学部件、可视化部件、2d/3d 交互式部件、医疗成像部件、特定于应用程序的部件。
  • Image Gallery:介绍了各个部件及其效果图
  • Transfer function widgets:介绍了支持 VTK 函数的部件
  • Workflow widgets:介绍了工作流相关内容,包括:工作流类、定义工作流的步骤、ctkWorkflow 的状态图、ctkWorkflowWidget 中的 GUI 实现。
  • Popup widgets:一个弹出部件,可以在适当时显示,当不想要时,可以隐藏起来。

使用 CTKWidgets

有了 CTKWidgets 库,使用起来相当简单,和其他第三方库一样。

这里写图片描述

工程文件 *.pro 如下所示:

QT += core gui widgetsTARGET = ExampleTEMPLATE = appLIBS += -L$$PWD/Libs -lCTKWidgetsINCLUDEPATH += \    $$PWD/../../CTK-master/Libs/Core \    $$PWD/../../CTK-master/Libs/WidgetsSOURCES += main.cpp

注意: 除了包含库文件之外,还需要包含库相关的路径。

现在,可以根据 CTKWidgets 中的部件,来实现想要的效果了。

main.cpp 如下所示:

// Qt includes#include <QApplication>#include <QFormLayout>#include <QVBoxLayout>// CTK includes#include <ctkCheckablePushButton.h>#include <ctkCollapsibleButton.h>#include <ctkColorPickerButton.h>#include <ctkRangeWidget.h>int main(int argc, char* argv[]){  QApplication app(argc, argv);  QWidget topLevel;  QVBoxLayout* topLevelLayout = new QVBoxLayout;  ctkCollapsibleButton buttons("Buttons");  QFormLayout* buttonsLayout = new QFormLayout;  buttonsLayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);  topLevelLayout->addWidget(&buttons);  ctkCheckablePushButton checkablePushButton;  checkablePushButton.setText("Checkable");  buttonsLayout->addRow("ctkCheckablePushButton", &checkablePushButton);  ctkColorPickerButton colorPickerButton;  colorPickerButton.setColor(QColor("#9e1414"));  buttonsLayout->addRow("ctkColorPickerButton", &colorPickerButton);  buttons.setLayout(buttonsLayout);  ctkCollapsibleButton sliders("Sliders");  QFormLayout* slidersLayout = new QFormLayout;  topLevelLayout->addWidget(&sliders);  ctkRangeWidget rangeWidget;  slidersLayout->addRow("ctkRangeWidget", &rangeWidget);  sliders.setLayout(slidersLayout);  topLevel.setLayout(topLevelLayout);  topLevel.show();  return app.exec();}

在编译过程中,有可能会出现错误:

E:\CTK-master\Libs\Widgets\ctkPushButton.h:30: error: C1083: 无法打开包括文件: “ctkWidgetsExport.h”: No such file or directory

这是因为,CTKWidgets 是一个动态库,其中的类被导出了,而 ctkWidgetsExport.h 正是定义导入/导出相关的头文件。

进入 CTK-build/Libs/Widgets(CTK 构建目录),将 ctkWidgetsExport.h 拷贝至 CTK-master/Libs/Widgets(CTK 源码目录),再次编译,完美运行!

CTKWidgets 测试

CTK 中的所有部分都有大量的测试相关代码,在模块中的 Testing 目录中。

以 CTKWidgets 为例,测试代码位于 CTK-master/Libs/Widgets/Testing/Cpp 中。

如果不会使用 CTK,可以先试试其中的测试代码,可以当做示例来用。

测试相关文档,参考:Widget testing