在 Qt 的undo framework中,你可以拥有一堆QUndoCommand
实例。这些中的每一个都描述了用户界面中的一个动作。在我们的应用程序中,我们有一组视图处理一组模型,其中一些是组合的,而且我们经常有多个视图处理同一组模型。我现在正在研究基于此框架撤消操作的能力。
现在,我熟悉使用命令类来描述 UI 操作的一般模式,但是这些应该表示 UI 元素中的状态更改,还是底层模型中的数据更改?一个命令类应该包含多少数据和状态?
一个例子来说明我的观点:假设您有一个QStandardItemModel
作为基础模型,以及位于此之上的许多代理模型。每个代理模型都会进行排序转换,例如通过某个值的出现进行过滤。然后,如果我创建一个命令类来专门更改这些代理模型之一中的一个值,并且过滤条件发生更改,则该命令类的状态将变为无效。所以我还必须包含过滤器的状态,或者映射到最终的底层模型。另一种选择是为 UI 中的所有状态更改添加命令(例如,导致过滤条件更改的那些),但这样做的缺点似乎是要撤消的命令列表变得相当大。
这里有哪些最佳实践?