我想知道像winHex这样的实用程序,它们是磁盘编辑器 。他们访问硬盘&表示大约2TB的整个硬盘的十六进制数据。 他们如何在一个滚动区域实现这一目标。还提供了撤消功能...... 哪个小部件应该用于显示如此大量的数据。 我想在QT中制作这个应用程序。
答案 0 :(得分:1)
他们如何在单个滚动区域实现这一目标
它不是包含整个磁盘的“单个滚动区域”。它是一个滚动条和动态生成的内容,适用于您当时显示的任何磁盘内容。
只需根据滚动位置计算位置(除非您的屏幕是10000像素高,但是,您将无法将光标完全放在您想要的磁盘扇区上)。
还提供撤消功能......
撤消功能,我希望(我没有看过代码)是通过在某种容器中保存“地址已更改,旧值”来完成的。几乎与您为任何其他大型数据集撤消信息的方式相同。
应使用哪个小部件来显示如此大量的数据。????
显示文本并允许您截取重绘并在每次重绘操作上提供自己的数据。我恐怕我不太了解QT,所以不能就细节提出建议。
显然,你没有涉及的一个因素是“如何在已经安装的情况下以读写模式打开/挂载整个磁盘” - 我不确定它是否允许这样做,但是如果允许的话,我希望有一个磁盘过滤器驱动程序,它具有“侧面”接口,允许在文件系统的幕后进行更新。
编辑:回答评论中的问题:
有两个选项,可以在数据更改时写入磁盘。在这种情况下,代码需要记住所有原始值,并在用户执行undo
操作时恢复它们。替代方案大致相同,即存储所有编辑(“将值更改为1000到05”),然后在要求显示某些内容时,在实际显示操作之前处理显示范围内的任何编辑。
显然,如果有人决定用“键盘上的猴子”玩很多小时(几周,几个月)来用相当随机的内容填充整个磁盘,那么在不用完的情况下“记住”所有这些都是一个问题。内存,所以你可能需要一个“我内存不足以存储撤消信息,你想保存你到目前为止所做的事情吗?”类型选项。
还可以考虑“存储在大部分中的相同值”类型压缩(例如,如果您有“从A到B填充值X”,则只存储“从A到B我们已经填充X” “而不是存储,可能存在许多兆字节的”A = X,A + 1 = X,A + 2 = X ... B-1 = X,B = X“)。