大家好,
我们正在开发一个科学的QT应用程序,它可以检测cell.Please的边界,请参考以下原型快照。


现在,我们将把它作为一个设计良好的开源产品来开发,architecture.We发现它有很多复杂的动作和流程。例如:移动轮廓节点,删除轮廓节点,添加轮廓节点,绘制障碍物,选择多个nodes...etc
我们希望为UI使用QT状态机框架,并且想知道是为每个流/动作使用几个状态机实例,还是使用一个“巨大的”状态机?我们需要Undo/Redo操作,是否可以将QT状态机框架与QT Undo/Redo框架交互?
编辑:真的可以使用QT SM Framekwork来处理UI交互吗?他们在GIMP或CAD应用程序中使用哪种设计?
提前谢谢你,umanga
发布于 2010-07-18 21:25:57
我认为状态机并不是表示用户交互的正确选择。它适合于轻松地对用户界面本身的更改进行建模。
您可能需要的是状态机和的组合,在Qt中,这是由QUndoStack和QUndoCommand类部分实现的。状态机跟踪用户界面本身的更改,Command类跟踪用户交互。我对检测单元格边框不是很了解,也不知道你是如何在你的应用中规划交互模型的,但让我尝试一个虚构的例子来澄清一下。
示例
假设您的应用程序有两种不同的算法来检测单元格边界,从用户提供的粗略估计开始。一个人在细胞周围采取一条粗略的逐点路径。另一种是手绘的轮廓。您还希望允许用户向单元格图像添加标注注释。假设您也不想让用户的屏幕上充斥着她现在不会使用的工具。
这样,您就有了三种不同的交互模式,并且每种模式都有用户可以使用的不同操作(或工具):
除了提供工具之外,前两种模式还可能允许用户调整算法的参数。
一种方法是将1、2和3中的每一个表示为状态机中的状态。在进入其中一个状态时,它会使工具变得可见。当状态退出时,它会隐藏其工具。例如,可以使用工具栏按钮来完成状态的更改。
现在,当使用工具并更改其下的模型时,它还会在QUndoStack中存储一个QUndoCommand。假设用户处于手绘模式。现在,她切换到点对点模式,调整参数,添加两个点,移动一个点,然后将其删除。从下到上,撤消堆栈可能如下所示:
请注意,状态更改已添加到撤消堆栈中,因此撤消一系列命令会使用户在发出命令时所处的位置不变。例如,如果她一直撤消到1,则她将返回到手绘模式。
总而言之
Qt中的状态机适用于跟踪用户更改interface.
发布于 2010-07-09 11:21:33
我们已经尝试了Qt的状态机框架和动画框架来实现简单的UI转换。我相信在他们的文档或网站上有关于如何做到这一点的教程或例子。所以,是的,这是可能的。
我不知道它的伸缩性有多好,也不知道最好的架构。如果是我,我会尝试使用许多简单的状态机,利用它们的分层功能。
https://stackoverflow.com/questions/3209410
复制相似问题