MATLAB中是否有用于触发任何其他回调的回调函数?

3

我想在自己创建的GUI中添加“撤销”功能。我的想法是,每当更改设置时,创建一个对象的副本,该副本存储GUI的所有设置。为此,如果存在一个“主”回调函数,该函数可以在用户触发任何其他GUI回调函数时触发,那么将非常方便。是否存在这样的回调函数?谢谢!


我不知道"callback-callback"是什么。但你考虑过将所有设置存储在一个保存历史记录的类中吗?每当你更新这个类时,它都会存储它们并能够撤消你所做的任何更新。这样,你就可以将更新功能作为设置的属性而不是GUI的属性。 - Shai
2
FYI:MATLAB 中有一个未记录的撤销“框架”,您可以使用它作为一种替代方案,而不必发明全新的东西:http://undocumentedmatlab.com/blog/uiundo-matlab-undocumented-undo-redo-manager/ - sebastian
我可以想到一个使用图形的guidata的函数;这个函数可以提取所有元素的属性并保存它。在每个回调中,您可以调用此函数并将guidata作为参数传递。但是,如果有“许多”元素,则我相当确定这会减慢GUI的速度。 - Lucius II.
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);%复制最后一组设置

gui_settings(end).button1 = get(h_button1,'value');%读取按钮1的设置

%读取所有其他设置...

set(gcf,'UserData',gui_settings)%将设置存储在UserData中

4)修改其他回调函数,在某个时刻调用“StoreGuiSettings”回调函数以启用撤消

5)创建一个“撤消”回调函数,该函数从UserData中检索GUI设置,删除结构数组中的最后一个元素gui_settings(end) = [];,并将gui_settings重新存储在UserData中。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接