3

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

或更笼统地说:我想在函数中没有将其作为参数的某处访问“句柄”对象。

编辑:所以我有一个如下所示的回调函数:

function updatePosition(pos, hObject, handles)

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

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

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

4

2 回答 2

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);
于 2012-11-09T18:11:35.627 回答
0

如果您使用 GUIDE 设计 GUI,handles.output 将句柄存储到主界面。因此,如果您在回调中添加此行:

handles=guidata(handles.output);

它应该将您的句柄更新为当前版本。您可以在这里获得所有这些的一些详细信息:http: //www.matlabtips.com/guide-me-in-the-guide/

于 2012-05-01T00:31:34.607 回答