QT:使用状态机进行UI交互?

Ash*_*iya 12 architecture user-interface qt undo state-machine

问候,

我们正在开发一种科学的QT应用程序,用于检测细胞的边界.请参考以下原型快照.

在此输入图像描述 在此输入图像描述

现在,我们将把它开发为具有良好设计和架构的开源产品.我们重新确认它有许多复杂的动作和流程.例如:移动轮廓节点,删除coutour节点,添加轮廓节点,绘制障碍,选择多个节点等

我们希望用QT状态机框架的UI,并考虑是否要使用几个状态机实例的每个流/动作或使用一个"巨大"的状态机?我们需要理解过程/恢复操作,并有可能interate QT状态机框架与QT撤销/重做框架?

[编辑]是否真的可以使用QT SM Framekwork来处理UI交互?他们在GIMP或CAD应用程序中使用什么样的设计?

提前谢谢,umanga

and*_*ref 6

我相信状态机不是真正代表用户交互的正确选择.它适用于轻松模拟用户界面本身的更改.

您可能需要的是状态机和Command设计模式的组合,Qt中的部分由QUndoStack和QUndoCommand类实现.状态机跟踪用户界面本身的更改,Command类跟踪用户交互.我不太了解检测细胞边界,我不知道你是如何计划你的应用程序中的交互模型,但让我尝试一个假设的例子只是为了澄清.

假设您的应用程序有两种不同的算法,可以从用户提供的粗略估计开始检测单元格边框.一个人在细胞周围采取粗略的逐点路径.另一个采用手绘轮廓.您还希望允许用户将标注注释添加到单元格图像.假设您也不想使用她现在不会使用的工具来混淆用户的屏幕.

然后,您有三种不同的交互模式,每种模式都有不同的用户可以使用的操作(或工具):

  1. 一点一点地说.用户可以添加点,移除点,移动点,选择点以及细化边界.
  2. 写意.用户可以使用"铅笔"和"橡皮擦"绘制并细化边框.
  3. 标注说明.用户可以添加注释,删除注释,移动注释,重新定位注释的箭头,以及编辑注释的文本.

除了提供工具之外,前两种模式还可以允许用户调整算法的参数.

一种方法是将1,2和3中的每一个表示为状态机中的状态.进入其中一个状态后,它会使工具变得可见.退出状态时,它会隐藏其工具.例如,可以使用工具栏按钮完成更改状态.

现在,当使用工具并更改下面的模型时,它还会在QUndoStack中存储QUndoCommand.假设用户处于徒手模式.现在,她切换到点对点模式,调整参数,添加两个点,移动一个点,然后删除它.撤消堆栈可能看起来像这样,从下到上:

  1. 从徒手模式切换到点对点模式
  2. 将参数ε从0.00001 更改为0.002
  3. 在(120,40)添加#1点
  4. 在(403,11)添加#2点
  5. 将点#1从(120,40)移动到(350,120)
  6. 删除#1点

请注意,状态更改已添加到撤消堆栈中,因此撤消一系列命令会使用户完全脱离发布时的位置.例如,如果她一直没有回到1,她将回到徒手模式.

总而言之

  • Qt中的状态机适用于跟踪用户界面中的更改.
  • 命令设计模式适用于跟踪用户在基础模型中所做的更改.