我想在我制作的 GUI 中创建类似“撤消”的功能。我的想法是创建一个对象的副本,以便在更改设置时存储我的 GUI 的所有设置。要做到这一点,如果有一个“主”回调会在用户触发任何其他 GUI 回调时触发,这将是很方便的。这样的回调是否存在?谢谢!
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 结构数组中哪个元素是当前元素的指针,然后在用户想要“重做”或“撤消”时更改指针。