我想在我制作的GUI中创建一个“撤消”功能。我的想法是创建一个对象的副本,当设置发生更改时,该对象将存储我的GUI的所有设置。要做到这一点,如果有一个“主”回调会很方便,只要用户触发任何其他GUI回调就会触发。这样的回调是否存在?谢谢!在MATLAB中是否有触发其他回调的回调?
回答
我不知道像您所描述的回调,但如果您将设置存储在结构数组中,则可以返回到之前的设置。
这里是我的建议:
1)与命令的结构喜欢这家店的GUI设置:
gui_settings.button1=1;
gui_settings.button2 = 0;
2)存储在GUI中的设置结构你的gui图的用户数据
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)制作一个“Undo”回调,从UserData中检索gui设置,删除结构中的最后一个元素array gui_settings(end) = [];
,并将gui_settings存储回UserData。
如果您不想选择“重做”选项,那么删除最后的设置即可。如果你想“重做”,那么你将不得不保持一个指针,指向gui_settings结构数组中的哪个元素是当前的元素,然后当用户想要“重做”或“撤销”时更改指针。
- 1. 在matlab中使用其他回调中的按钮回调
- 2. 在jQuery的.val()中使用回调是否有其他选择?
- 3. 订阅节是否触发回调?
- 4. 如何从一个回调参数发送回其他回调?
- 5. Node.js“回调已被调用”。但没有任何其他回调
- 6. 是否有触发回调/观察者的ActiveRecord :: Relation.update_all等价物?
- 7. MATLAB GUI中没有回调?
- 8. 是否有History.pushstate的回调?
- 9. 每当Activerecord触发一个回调:after_save回调触发器
- 10. 是否有取回的Relay.createContainer回调?
- 11. JavaScript回调/关闭/其他
- 12. 从其他线程回调
- 13. 在RhinoMocks中使用回调触发器
- 14. matlab GUI回调
- 15. Matlab ResizeFcn回调
- 16. jQuery.getJSON不会触发回调
- 17. WebSocket回调未触发angularjs
- 18. Firebase回调不会触发
- 19. Timer.Elapsed回调未被触发
- 20. C#如何触发回调?
- 21. getJSON回调不触发
- 22. Kivy UrlRequest不触发回调
- 23. Laravel Echo不触发回调
- 24. 手动触发omniauth回调
- 25. CMAltimeter回调从未触发
- 26. 触发回调完成
- 27. AJAX回调不会触发
- 28. PeekMessage触发WndProc回调
- 29. PSelectionEventHandler不触发回调
- 30. JQuery JSON回调未触发
我不知道“回调回调”。但是你有没有考虑将所有设置存储在存储其历史记录的地方?每当你更新这个calss时,它就会存储它们,并且能够撤销你对它做出的任何更新。通过这种方式,您可以使更新功能成为设置的属性,而不是GUI。 – Shai
仅供参考:在MATLAB中有一个未公开的撤消“框架”,您可以使用它作为发明这一全新功能的替代方案:http://undocumentedmatlab.com/blog/uiundo-matlab-undocumented-undo-redo-经理/ – sebastian
以及我可以想到一个函数,使用该图的guidata;这个函数可以提取元素的所有属性并保存。在每个回调中,您可以调用此函数并将guidata作为参数。但我相当确信,如果有“很多”元素,这会降低GUI。 –