似乎检测文本/图像/数据文件中未保存更改的三种方法可能是:
每次用户进行更改或保存时更新一个布尔标志,这将导致大量不必要的更新。
保留原始文件的缓存副本,并在每次需要检查保存操作时对两者进行比较。
根据需要保留所有过去的操作和 push/pop 操作的堆栈,从而导致大量额外的内存使用。
一般来说,商业应用程序如何检测是否存在未保存的更改以及每种方法的优点/缺点是什么?我在编写具有特殊保存行为的自定义应用程序时遇到了这个问题,并且想知道是否存在已知的最佳实践。
似乎检测文本/图像/数据文件中未保存更改的三种方法可能是:
每次用户进行更改或保存时更新一个布尔标志,这将导致大量不必要的更新。
保留原始文件的缓存副本,并在每次需要检查保存操作时对两者进行比较。
根据需要保留所有过去的操作和 push/pop 操作的堆栈,从而导致大量额外的内存使用。
一般来说,商业应用程序如何检测是否存在未保存的更改以及每种方法的优点/缺点是什么?我在编写具有特殊保存行为的自定义应用程序时遇到了这个问题,并且想知道是否存在已知的最佳实践。
只要您需要撤消/重做系统,就需要过去的操作堆栈。为了检测文档处于哪种状态,堆栈中的一项设置为“已保存状态”。当前堆栈节点不是该项目,文档已更改。
您可以在 Qt QUndoStack( http://doc.qt.nokia.com/stable/qundostack.html ) 及其isClean()
和setClean()
对于命题 1,更新布尔值没有问题,而且花费的时间很少。
我猜这取决于您想要的功能和文件的大小/格式。
第一个选项是最简单的,它以最小的开销为您提供您想要的东西。
第二个选项的优点是您可以检测到更改何时被手动恢复,这样就没有真正的更改(尽管这可能不会经常发生)。另一方面,制作差异只是为了检查是否有任何修改,成本要高得多。您可能不想在用户每次按键时都这样做。
第三个选项提供了提供撤销历史的能力。您可以通过将连续进行的更改组合在一起(不移动光标)或类似的方式来限制该历史记录中的项目数量。