Ash*_*iya 12 architecture user-interface qt undo state-machine
问候,
我们正在开发一种科学的QT应用程序,用于检测细胞的边界.请参考以下原型快照.

现在,我们将把它开发为具有良好设计和架构的开源产品.我们重新确认它有许多复杂的动作和流程.例如:移动轮廓节点,删除coutour节点,添加轮廓节点,绘制障碍,选择多个节点等
我们希望用QT状态机框架的UI,并考虑是否要使用几个状态机实例的每个流/动作或使用一个"巨大"的状态机?我们需要理解过程/恢复操作,并有可能interate QT状态机框架与QT撤销/重做框架?
[编辑]是否真的可以使用QT SM Framekwork来处理UI交互?他们在GIMP或CAD应用程序中使用什么样的设计?
提前谢谢,umanga
我相信状态机不是真正代表用户交互的正确选择.它适用于轻松模拟用户界面本身的更改.
您可能需要的是状态机和Command设计模式的组合,Qt中的部分由QUndoStack和QUndoCommand类实现.状态机跟踪用户界面本身的更改,Command类跟踪用户交互.我不太了解检测细胞边界,我不知道你是如何计划你的应用程序中的交互模型,但让我尝试一个假设的例子只是为了澄清.
假设您的应用程序有两种不同的算法,可以从用户提供的粗略估计开始检测单元格边框.一个人在细胞周围采取粗略的逐点路径.另一个采用手绘轮廓.您还希望允许用户将标注注释添加到单元格图像.假设您也不想使用她现在不会使用的工具来混淆用户的屏幕.
然后,您有三种不同的交互模式,每种模式都有不同的用户可以使用的操作(或工具):
除了提供工具之外,前两种模式还可以允许用户调整算法的参数.
一种方法是将1,2和3中的每一个表示为状态机中的状态.进入其中一个状态后,它会使工具变得可见.退出状态时,它会隐藏其工具.例如,可以使用工具栏按钮完成更改状态.
现在,当使用工具并更改下面的模型时,它还会在QUndoStack中存储QUndoCommand.假设用户处于徒手模式.现在,她切换到点对点模式,调整参数,添加两个点,移动一个点,然后删除它.撤消堆栈可能看起来像这样,从下到上:
请注意,状态更改已添加到撤消堆栈中,因此撤消一系列命令会使用户完全脱离发布时的位置.例如,如果她一直没有回到1,她将回到徒手模式.