我在Matlab中编写GUI时相当新,并注意到在回调之间传递信息时,通常会传递两个值hObject
和handles
。
从我阅读和理解的内容来看,hObject
是包含真实数据(或至少是句柄)的对象的句柄,而handles
本身不是句柄,而是一个结构再现对象的结构"背后" hObject
。更改(或添加到)handles
不会更改从调用函数中看到的实际数据,而是更改本地副本。要将更改的数据实际写入hObject
指向的对象,我需要调用guidata(hObject, handles)
。
到目前为止这是对的还是我弄错了?
我还读到我可以通过调用handles
来创建类似于handles = guidata(hObject)
的结构。
那么将hObject
和handles
传递给我自己的一个函数是否有任何意义,而不仅仅是传递hObject
并在本地创建handles
? /强>
答案 0 :(得分:2)
到目前为止你是对的。输入参数handles
是跟踪UI的所有组件的便捷方式。标准handles
不是输入参数。但是如果你使用guide
,它将通过设置例如匿名函数Callback
的{{1}}选项,将其设置为一个额外的参数。
这当然可以通过@(hObject,eventdata)guitest('pushbutton1_Callback',hObject,eventdata,guidata(hObject))
在函数代码中轻松完成。
通常您不需要更改handles = guidata(hObject)
(仅在他们引用的对象中),但是如果您需要更改handles
中的内容(例如,如果您使用它来存储)不仅仅是UI元素的handles
,重要的是调用handles
来实际保存更改。
因此,对您提出的简短回答是:不,您也可以在需要时自行检索guidata(hObject, handles)
。