一、初始化

1.创建LoadableModule的文件目录

利用slicer中的 extension wizard模块来产生基于模板的文件和目录。

2.编译创建(build)

3.装载(install)

4.检查模块情况(check)

5.用启动器打开QtDesigner

6.在QtDesigner中修改界面文件.ui

7.根据应用需要编辑相应的文件.cpp/.h

二、在QtDesigner中设置widget的图标

1.Qt中的资源管理系统

在Qt工程的工程文件中可以包含Qt资源管理文件.qrc 。例如在Qt的界面中可能会用到的图片,其调用方式就有两种,一是放在可执行程序外部,采用绝对或相对路径的方式调用,这种方式当图片位置发生变化,那么程序将无法正常显示图片;另外一种就是使用Qt的资源系统来存储图片,这样他们就可以嵌入到可执行程序中去了。最好(图像资源等资源文件都包含在一个文件夹中,如./Icons)。相应的在在工程文件*.pro中须添加行:

RESOURCES +=\myImage.qrc

对于Qt资源管理文件.qrc,在工程的目录下须建立一个资源管理文件夹如./Icons,在该文件夹中放入资源文件如image.png等(Qt的资源系统要求资源文件必须放在qrc文件的同级或子级目录下)。其实资源可以是任意类型的,不只是图片文件,不过资源只能是只读的,不能对其进行更改。编译时会对加入的资源自动压缩。

.qrc文件实际上是一个XML格式的文件,在其中须添加如下内容(典型的*.qrc文件):

<!DOCTYPE RCC><RCC version="1.0">
<qresource><file>Icons/image.png</file>
</qresource>
</RCC>

在项目的cpp文件中引用资源时:

QIcon(":/Icons/image.png") //调用Icons文件夹中的image.png。

2.怎样为Qt部件添加图标

需要在部件的图标属性入口处(部件的属性管理器)选择资源文件:

  • Slicer4/Modules/Loadable/MY_MODULE_NAME/Resources/qSlicerMY_MODULE_NAMEModule.qrc
  • Slicer4/Libs/MRML/Widgets/Resources/qMRMLWidget.qrc
  • Slicer4/Base/QTGUI/Resources/qSlicerBaseQTGUI.qrc

3.为资源系统添加资源文件

首先在/Icons目录下(Slicer4/Modules/Loadable/MY_MODULE_NAME/Resources/Icon)加入资源文件如pic.png。然后需要在

资源管理文件.qrc中加入如下代码:

<file>Icons/MyIcon.png</file>

三、3Dslicer中模块之间的相互依存关系

在有些情况下你自己开发的loadablemodule需要用到其他模块的信息,如一个模块的logic或者是一些定制的MRML类,这种情况下不需要重复编写模块功能,可采用如下方式,下面的代码给出要设计一个模块依存于Volume模块的logic应该怎样做:

1.修改CMakeLists.txt

set(MODULE_INCLUDE_DIRECTORIES${CMAKE_CURRENT_SOURCE_DIR}/Widgets${CMAKE_CURRENT_BINARY_DIR}/Widgets${vtkSlicerVolumesModuleLogic_SOURCE_DIR}       #添加${vtkSlicerVolumesModuleLogic_BINARY_DIR}       #添加)... set(MODULE_TARGET_LIBRARIES...vtkSlicerVolumesModuleLogic                     #添加)

2.在qSlicerMY_MODULE_NAMEModule.cxx中修改

 //-----------------------------------------------------------------------------QStringList qSlicerMY_MODULE_NAMEModule::dependencies()const{return QStringList() << "Volumes";}//-----------------------------------------------------------------------------void qSlicerMY_MODULE_NAMEModule::setup(){this->Superclass::setup();vtkSlicerMY_MODULE_NAMELogic* moduleLogic =vtkSlicerMY_MODULE_NAMELogic::SafeDownCast(this->logic());qSlicerAbstractCoreModule* volumesModule =qSlicerCoreApplication::application()->moduleManager()->module("Volumes");if (volumesModule){vtkSlicerVolumesLogic* volumesLogic = vtkSlicerVolumesLogic::SafeDownCast(volumesModule->logic());moduleLogic->SetVolumesLogic(volumesLogic);}

在指定了模块的依存关系后,确保了被依存模块会在该模块之前进行setup()。

在CMakeLists.txt中采用类似的操作添加对一个模块部件(widget)的依存:

set(MODULE_INCLUDE_DIRECTORIES... ${qSlicerVolumesModuleWidgets_SOURCE_DIR}${qSlicerVolumesModuleWidgets_BINARY_DIR}...)...set(MODULE_TARGET_LIBRARIES...qSlicerVolumesModuleWidgets)

如果想要获取一个custom MRML或者displayable manager 类,采用相同的工作模式:

  • custom MRML (vtkSlicerDEPENDENT_MODULEModuleMRML_SOURCE_DIR)
  • displayable manager (vtkSlicerDEPENDENT_MODULEModuleDisplayableManager_SOURCE_DIR)

四、典型应用

Crop Volume module  依存于  Volumes module

怎样在3Dslicer中创建LoadableModule相关推荐

  1. 3DSlicer中使用简单脚本处理数据

    打开slicer中的自带Python交互器.可以通过,菜单栏"View"中的"Python Interactor"打开,也可以直接点击工具栏中的Python图标 ...

  2. 如何在sqlite3连接中创建并调用自定义函数

    #!/user/bin/env python # @Time :2018/6/8 14:44 # @Author :PGIDYSQ #@File :CreateFunTest.py '''如何在sql ...

  3. ROS话题通信中创建自定义数据类型的两种方式

    一.在同一个功能包下创建.msg文件 1.在功能包目录下创建msg文件夹 2.在文件夹中创建.msg文件 3.在该功能包的package.xml文件中加入: <build_depend>m ...

  4. asp.net mysql 创建变_[ASP.net教程]EF Core使用CodeFirst在MySql中创建新数据库以及已有的Mysql数据库如何使用DB First生成域模型...

    [ASP.net教程]EF Core使用CodeFirst在MySql中创建新数据库以及已有的Mysql数据库如何使用DB First生成域模型 0 2018-06-30 07:00:08 官方教程: ...

  5. razor html帮助器,在 ASP.NET 网页(Razor)网站中创建和使用帮助器 | Microsoft Docs

    在 ASP.NET 网页(Razor)网站中创建和使用 Helper 02/17/2014 本文内容 本文介绍如何在 ASP.NET 网页(Razor)网站中创建帮助程序. 帮助器是一种可重用的组件, ...

  6. 在Substance Designer中创建砖墙视频教程

    学习在Substance Designer中创建复杂材料的高级技术. 如果你想进入游戏行业,想学习如何创建高质量的纹理和学习物质设计,那么这个课程是给你的. 我设计了这个课程,从一开始就带你,教你我用 ...

  7. 学习在Unity中创建一个动作RPG游戏

    游戏开发变得简单.使用Unity学习C#并创建您自己的动作角色扮演游戏! 你会学到什么 学习C#,一种现代通用的编程语言. 了解Unity中2D发展的能力. 发展强大的和可移植的解决问题的技能. 了解 ...

  8. 学习用C#在Unity中创建一个2D Metroidvania游戏

    学习用C#在Unity中创建一个2D Metroidvania游戏 你会学到: 构建2D Unity游戏 用C#编程 玩家统计,水平提升,米尔和远程攻击 敌方人工智能系统 制定级别和级别选择 Lear ...

  9. 在Blender中创建惊人的低多边形动画

    大小解压后:13.5G 持续时间10小时+ 包括项目文件 1920X1080 MP4 语言:英语+中英文字幕(根据原英文字幕机译更准确) 标题:CGBoost学院–立方体世界在Blender中创建惊人 ...

最新文章

  1. AI规模化落地,英特尔至强的七重助力
  2. Linux网络包接收过程的监控与调优
  3. Visual Studio 文件没发布出来
  4. windows聚焦图片为什么不更新了_为什么年轻明星都不愿意接周星驰的戏? 林更新道出了事情的真相|周星驰|林更新|喜剧之王|演员...
  5. wx.checkjsapi是写在config里面吗_用Python写一个程序,解密游戏内抽奖的秘密
  6. java 俄文,俄文字体在word里面是什么
  7. 推荐北大饶毅教授的《生物学概念与途径》课程(慕课视频+讲义)
  8. window常用命令(持续更新)
  9. concurrenthashmap_ConcurrentHashMap原理浅析
  10. 三坐标测量圆直径_多台三坐标测量机联动测量方法的研究
  11. 2.数据结构 --- 线性表
  12. linux系统 32位 64位 jdk下载 jdk6 jdk7
  13. 【Java基础系列教程】第六章 Java面向对象详解(一)_类和类的成员
  14. 求正整数2和n之间的完全数
  15. html控制台 打印 consol,浏览器console.log()打印输出台不显示输出内容……
  16. 解决Failed to introspect Class KafkaMetricsAutoConfiguration
  17. Elasticsearch7.×集群搭建,生命周期策略ilm_policy、索引模板template管理(二)
  18. JAVA远程连接ssh异步,SSH-2实现java连接远程服务器并执行脚本命令
  19. html表单提交和input标签了解
  20. 分布式架构实现概述(大型网站技术架构-读后感)

热门文章

  1. 首次为安装计算机做准备后蓝屏重启,新装电脑蓝屏死机自动重启,问题在哪里?...
  2. ubuntu 16.04 百度云客户端安装和修复bug
  3. 【项目】P2P下载帮
  4. 帝国理工学院计算机相关,帝国理工学院计算机
  5. PHP数组转字符串与PHP字符串转数组的相关方法解析
  6. 前端zrender框架使其可拖拽
  7. 集美大学计算机工程学院领导班子,数据库-集美大学计算机工程学院.PPT
  8. 电子计算机房用电负荷标准,8.1 供配电_数据中心设计规范 GB50174-2017_消防规范网_119消防考试网...
  9. 服务器安装Windows Server 2008 R2系统过程中遇到的一些坑
  10. 客户关系管理系统PRD编写