2012-04-02 61 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);