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