我想在我制作的GUI中创建一个类似“撤消”的功能。我的想法是创建一个对象的副本,每当设置发生更改时,该对象都会存储GUI的所有设置。要做到这一点,如果有一个“主”回调,只要用户触发任何其他GUI回调就会触发,这将是很方便的。这样的回调是否存在?谢谢!
答案 0 :(得分:1)
我不知道您所描述的回调,但如果您将设置存储在结构数组中,则可以返回之前的设置。
以下是我的建议:
1)使用以下命令将gui设置存储在结构中:
gui_settings.button1=1;
gui_settings.button2 = 0;
2)将gui设置结构存储在gui figure的UserData中
set(gcf, 'UserData', gui_settings)
3)为读取所有gui设置的“StoreGuiSettings”创建一个回调,然后将它们存储回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结构数组中哪个元素是当前元素的指针,然后在用户想要“重做”或“撤消”时更改指针。