如何在用户输入时确定从QTextDocument中删除的内容?

时间:2014-04-15 02:39:22

标签: c++ qt user-interface qt5

我的应用程序中有一个必须为每一行维护的映射。 当用户删除一行时,我正在尝试检测哪一行,以便我可以更新我的映射。

contentsChange信号包含文档中发生更改的位置以及添加或删除的字符数,但此时确定删除之前的内容为时已晚。

到目前为止,我一直在考虑尝试:

  1. 如果我查看撤消堆栈,也许我可以查看已删除的行,但对于大型更改块,这可能不太可靠。
  2. 我可以为每次更改保留文件的先前状态,然后在信号被引发时尝试查看,但这似乎是很多不必要的开销。
  3. 我可以尝试深入挖掘源代码并在即将删除某些内容之前创建一个新信号,但之后我必须构建我的代码并发布此修改,因为我使用的是LGPL。
  4. 我可以在每个块中的userState中放置连续值,并且如果触发contentsChanged,并且我检测到发生更改的上一个块和下一个块之间的连续值中的间隙,我可以推断出已删除的块。这里的缺点是,在检测到更改以恢复连续值之后,我必须更新所有剩余的块。
  5. 最优雅(最简单和最便宜)的方式是什么?

    我正在使用Qt5.2.1和c ++。

    修改 我正在尝试对我的应用程序进行重大的重新设计,将更多的自定义信息直接放在块中的用户状态中(因为我没有自动换行)。如果我可以通过这种方法,它将避免检测何时一行删除一行,但问题仍然是一个有趣的问题,我认为它仍然需要一个答案。

    在其他GUI框架中,提供撤消堆栈的操作堆栈具有预更改回调和更改后回调。我认为改变前的回调是这里缺少的。还是有一些我不知道的更好的方法???

0 个答案:

没有答案