org.blueberry.ui.qt 插件功能分析
一句话定位
整个 BlueBerry 工作台(Workbench)的 Qt 实现------Eclipse RCP UI 层
(org.eclipse.ui)的 C++/Qt 移植版,是 MITK 图形界面的"操作系统"。
规模:385 个公共头文件 + internal 目录 338 个文件,是最大的框架插件。
manifest_headers.cmake 显示它只依赖 org.blueberry.core.commands 和
org.blueberry.core.expressions,而几乎所有 org.mitk.gui.qt.*
功能插件都依赖它------UI 插件栈的地基。
功能一:定义工作台的全部扩展点(14 个)
它是"UI 契约的制定者"。plugin.xml 中声明了 MITK 所有 UI 插件赖以工作的扩展点
(schema 契约在 schema/*.exsd):
| 扩展点 | 用途 |
|---|---|
org.blueberry.ui.views |
View(DataManager、分割视图等)注册于此 |
org.blueberry.ui.editors |
Editor(StdMultiWidget、MxN Display)注册于此 |
org.blueberry.ui.perspectives / perspectiveExtensions |
布局方案及其追加 |
org.blueberry.ui.commands / handlers / menus |
命令、处理器、菜单贡献 |
org.blueberry.ui.preferencePages / keywords |
设置页 |
org.blueberry.ui.presentationFactories |
换 tab 皮肤(presentation 框架入口) |
org.blueberry.ui.tweaklets / services / intro / elementFactories |
平台微调点、UI 服务、欢迎页、元素工厂 |
功能二:实现 Workbench 概念模型(internal/,338 个文件)
- 窗口层级 :
Workbench → WorkbenchWindow → WorkbenchPage → Perspective → Part(View/Editor) - 布局引擎 :
PartSashContainer/LayoutTree(二叉树)/LayoutPartSash/QtSash
------分屏与比例管理 - Part 管理 :
PartStack(tab 堆叠)、EditorManager、ViewFactory、生命周期与激活焦点 - Presentation 框架 :
StackPresentation/TabbedStackPresentation/
NativeTabFolder/QCTabBar------tab 页的绘制与交互 - 拖拽系统 :
DragUtil/QtTracker/DetachedWindow------tab 重排、跨区停靠、拖出浮窗 - Perspective 持久化:布局保存/恢复(IMemento)
功能三:提供插件开发的公共 API(src/ 顶层)
功能插件(如 datamanager)编程时用的接口全部来自这里:
berryIViewPart.h/berryIEditorPart.h/berryIWorkbenchPage.h------ Part 开发基类与接口berryISelectionService.h------ 选择服务(跨 View 选择传播机制)berryIEditorInput.h/berryIEditorRegistry.h------ Editor 输入与注册表AbstractUICTKPlugin------ UI 插件 Activator 基类
功能四:横切服务子系统(子目录)
| 目录 | 内容 |
|---|---|
commands/ handlers/ actions/ |
命令框架:命令定义、处理器绑定、菜单/工具栏 Action |
services/ |
服务定位器体系(IServiceLocator,按 site 分层的服务查找) |
presentations/ |
呈现框架公共 API |
application/ |
WorkbenchAdvisor 等应用生命周期钩子(App 启动时定制工作台) |
intro/ |
欢迎页框架 |
tweaklets/ |
平台适配点(GuiWidgetsTweaklet 等,把 Qt 细节隔离在可替换实现后) |
guitk/ util/ model/ |
GUI 工具事件、几何计算、UI 模型 |
testing/ |
UI 测试支持 |
在依赖栈中的位置
org.mitk.gui.qt.*(datamanager、segmentation、mxnmultiwidgeteditor...)
│ Require-Plugin / 实现其扩展点 / 调用其 API
▼
org.blueberry.ui.qt ← 本插件:工作台实现 + 扩展点定义 + 公共 API
│ Require-Plugin
▼
org.blueberry.core.commands / core.expressions
│
▼
org.blueberry.core.runtime(ExtensionRegistry,解析 plugin.xml)→ CTK
总结
org.blueberry.ui.qt= Eclipse 的org.eclipse.ui在 Qt 上的对应物。它不提供任何医学影像功能,但 MITK 所有可见的 UI 骨架------主窗口、tab 页、
视图停靠、拖拽、菜单、命令、选择广播、perspective 切换------全部由它实现;
功能插件只是往它定义的扩展点里"填内容"。