2012-04-02 63 views
3

我正在用Matlab的指南制作GUI。我使用impoint来放置点,我使用addNewPositionCallback来更新我的“点列表”。给予我作为回调函数的更新函数的一个参数是“句柄”对象。但是,Matlab通过值来传递这个值,所以当调用回调函数时,我确实在那里有句柄对象,但它是一个过时的版本。我想有一个像指向handle对象的指针。Matlab GUI,需要处理对象

或更一般:我想访问'处理'对象的某个地方,我没有它作为参数。

编辑: 所以我看起来像这样的一个回调函数:

function updatePosition(pos, hObject, handles)

其中我添加为这样的回调:

addNewPositionCallback(testh,@(pos) updatePosition(pos, hObject, handles));

而且我有一个pointlist在句柄中,handles.pointlist。它应该包含5个点,但是当我有一个updatePosition调用第一个点时,该列表只包含一个点:句柄似乎没有更新,它只是有一个从前面的副本。

回答

0

如果使用GUIDE设计GUI,handles.output会将句柄存储到主界面。 所以,如果你在回调中加入这一行:

handles=guidata(handles.output); 

它应该更新你的手柄到当前版本。 你可以在这里得到关于所有这些的一些细节: http://www.matlabtips.com/guide-me-in-the-guide/

3

像JavaScript一样,matlab脚本可以创建闭包作为函数句柄。这意味着它可以“捕捉”变量。您可以在可以访问句柄对象的上下文中创建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);