【问题标题】:Is there a callback for the triggering of any other callback in MATLAB?在 MATLAB 中是否有触发任何其他回调的回调?
【发布时间】:2013-10-30 19:49:42
【问题描述】:

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

【问题讨论】:

  • 我不知道“回调-回调”。但是您是否考虑过将所有设置存储在存储其历史记录的 cals 中?每当您对此课程进行更新时,它都会存储它们并且能够撤消您对其所做的任何更新。通过这种方式,您可以将更新功能设置为您的设置属性,而不是 GUI。
  • 仅供参考:MATLAB 中有一个未记录的撤消“框架”,您可以将其用作发明这个全新的替代方案:undocumentedmatlab.com/blog/…
  • 好吧,我可以想到一个使用图形的guidata的函数;这个函数可以提取元素的所有属性并保存。在每个回调中,您可以调用此函数并将 guidata 作为参数提供。但我很确定如果有“许多”元素,这会减慢 GUI。

标签: matlab callback undo


【解决方案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 结构体数组中哪个元素是当前元素的指针,然后在用户想要“重做”或“撤消”时更改指针。

【讨论】:

    猜你喜欢
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    相关资源
    最近更新 更多