3

我想在我制作的 GUI 中创建类似“撤消”的功能。我的想法是创建一个对象的副本,以便在更改设置时存储我的 GUI 的所有设置。要做到这一点,如果有一个“主”回调会在用户触发任何其他 GUI 回调时触发,这将是很方便的。这样的回调是否存在?谢谢!

4

1 回答 1

1

我不知道您描述的回调,但是如果您将设置存储在结构数组中,则可以返回到以前的设置。

这是我的建议:

1)使用如下命令将您的 gui 设置存储在结构中:

gui_settings.button1=1;

gui_settings.button2 = 0;

2) 将 gui 设置结构存储在 gui 图形的 UserData 中

set(gcf, 'UserData', gui_settings) 3) 为“StoreGuiSettings”创建一个回调,它将读取所有 gui 设置,然后将它们存储回 UserData,命令如下所示:

gui_settings = get(gcf, 'UserData');

gui_settings(end+1) = gui_settings(end); %copy the last group of settings

gui_settings(end).button1 = get(h_button1, 'value'); % read button 1's setting

% read all the other settings ...

set(gcf, 'UserData', gui_settings) % Store the settings in UserData

4)修改您的其他回调以在某个时候调用“StoreGuiSettings”回调以启用撤消

5) 进行“撤消”回调,从 UserData 检索 gui 设置,删除结构数组中的最后一个元素gui_settings(end) = [];,并将 gui_settings 存储回 UserData。

如果您不想选择“重做”选项,则可以删除最后一个设置。如果要“重做”,则必须维护指向 gui_settings 结构数组中哪个元素是当前元素的指针,然后在用户想要“重做”或“撤消”时更改指针。

于 2014-01-19T16:25:22.117 回答