Matlab GUI:我需要传递hObject和句柄吗?

时间:2014-11-11 12:23:23

标签: matlab handle matlab-guide

我在Matlab中编写GUI时相当新,并注意到在回调之间传递信息时,通常会传递两个值hObjecthandles

从我阅读和理解的内容来看,hObject是包含真实数据(或至少是句柄)的对象的句柄,而handles本身不是句柄,而是一个结构再现对象的结构"背后" hObject。更改(或添加到)handles不会更改从调用函数中看到的实际数据,而是更改本地副本。要将更改的数据实际写入hObject指向的对象,我需要调用guidata(hObject, handles)

到目前为止这是对的还是我弄错了?

我还读到我可以通过调用handles来创建类似于handles = guidata(hObject)的结构。

那么将hObjecthandles传递给我自己的一个函数是否有任何意义,而不仅仅是传递hObject并在本地创建handles? /强>

1 个答案:

答案 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)