我正在使用Matlab的指南制作GUI。我正在使用impoint放置点,我使用addNewPositionCallback来更新我的'点列表'。我作为回调给出的更新函数的一个参数是'handles'对象。但是Matlab通过值传递它,所以当调用回调时,我确实有句柄对象,但它是一个过时的版本。我想要一个像句柄对象的指针。
或者更一般:我想在函数中的某个地方访问'handles'对象,我没有将它作为参数。
编辑: 所以我有一个回调函数,如下所示:
function updatePosition(pos, hObject, handles)
我将其添加为这样的回调:
addNewPositionCallback(testh,@(pos) updatePosition(pos, hObject, handles));
我在句柄中有一个点列表,handles.pointlist
。它应该包含5个点,但是当我对第一个点进行updatePosition调用时,列表只包含一个点:句柄似乎没有更新,它只是前面有一个副本。
答案 0 :(得分:3)
与javascript一样,matlab脚本可以创建闭包作为函数句柄。这意味着它可以“捕获”变量。您可以在可以访问handle对象的上下文中创建updatePosition。你应该这样做:
H = handles.figure1; % get the figure handle
updatePosition = @(p) get(guihandles(H)... % the guihandles(H) contains the handles structure of the figure. Do whatever you need with it.
addNewPositionCallback(testh,updatePosition);
答案 1 :(得分:0)
如果使用GUIDE设计GUI,handle.output会将句柄存储到主界面。 因此,如果您在回调中添加此行:
handles=guidata(handles.output);
它应该将句柄更新为当前版本。 你可以在这里获得所有这些的一些细节: http://www.matlabtips.com/guide-me-in-the-guide/