在Qt/C++中实现撤消功能(如Ctrl + Z)

lia*_*iaK 3 c++ qt undo qt4

我使用Qt 4.5,并C++在Windows XP上.

基本上我将有一个UI,用户将输入一些数据.他可以去修改UI中可用的值.UI将具有基本的Qt UI元素,如QLineEdit,QTableWidget等等,

所以现在,如果用户按下Undo按钮(或Ctrl+Z),则应在相应的UI元素中保留先前的值.

比方说,如果有QLineEdit文本25.现在用户修改为30.现在通过单击撤消,应保留旧值25.

与通常在许多应用程序中可用的撤消功能类似.有什么办法吗?

gsp*_*spr 7

你可以使用Qt的撤销框架.


unw*_*ind 5

实现撤消的典型方法是表示用户完成的每个操作,并存储它们.您还希望能够计算给定操作的反转.

因此,对于插入文本缓冲区,操作将存储插入的文本以及插入发生的位置.然后,逆变为删除,在相同位置和插入文本的大小.

当用户要求应用程序撤消时,只需查看最近存储的操作,然后执行其反向操作.如果您现在不是删除"花费"操作而是记住它,那么您可以通过在操作历史中移动另一种方式来实现重做.

请注意,这是一个抽象的通用解释; 正如其他答案所指出的那样,Qt已经有了实施Undo的框架,所以你当然应该先调查一下.