2014-07-18 3 views
0

이미지 분석을 위해 GUIDE에서 MATLAB GUI를 설계했습니다. 함수간에 데이터를 공유해야하므로 guidata 함수를 사용하고 문서화 된 (http://www.mathworks.de/de/help/matlab/ref/guidata.html) 핸들 객체에 저장했습니다.MATLAB GUI : 교환 데이터 (핸들)

(자동으로 핸들을받는) 자동 생성 콜백 함수의 경우이 방법이 잘 작동하지만 자동 작성 기능 및 자체 작성 콜백 함수 (예 : 이미지 이벤트 클릭)의 데이터도 수정하고 싶습니다. 수동으로 데이터를 읽을 수있는 액세스를 제공하는 핸들 개체를 시도했지만 저장할 수있는 방법이 없습니다. guidata(hObject, handles)을 사용하여 객체 핸들도 전달하려고 시도했지만 객체 핸들이 작동하지 않습니다.

요약하면 : & 파일의 모든 기능에서 데이터를 읽는 방법이 필요합니다. 나는 모든 것을 세계화하는 것보다 더 우아한 방법을 찾고 있습니다. 그게 내 최후의 수단이 될거야.

의견이 있으십니까?

+0

문제를 복제하는 코드를 제공해주십시오. 명시 적으로 또는'guidata' 함수를 사용하여'handles' 구조체를 전달하는 것이 왜 작동하지 않는지는 명확하지 않습니다. 'guidata '에 대한 문서에 쓰여 있듯이, 자신의 필드 (예 : handles.mydata)를 만들고 GUIDE가 생성 한 필드를 덮어 쓰지 않는 한 문제가 발생하지 않아야합니다. – excaza

+0

또한,'guidata (hObject, handles)'는 검색 구문이 아닌 저장소 구문입니다. 'handles = guidata (hObject)'는 호출 객체가 저장 한 데이터를 검색합니다. 부모 GUIDE GUI의 경우 이것은 핸들 구조입니다. – excaza

답변

1

GUI에서는 기능간에 데이터 구조를 저장하고 공유하기 위해 setappdata/getappdata 기능을 사용할 수 있습니다 (link to docs).

그림을 핸들로 사용할 수 있습니다. 예를 들어 :

appData = struct; 
appData.image = someImage; 
appData.title = "someTitle"; 

setappdata(handles.figure1,'data',appData); 

나중에, 당신은 당신의 기능에 handles을 통과, 당신은 당신의 데이터를 검색 할 수 있습니다 :

function showTitle(handles) 
appData = getappdata(handles.figure1,'data'); 
title = appData.title; 
newTitle = "someNewTitle"; 
appData.title = newTitle; 
setappdata(handles.figure1,'data',appData); 

편집 : 그냥 콜백간에 데이터를 공유하기 위해 여러 전략을 지정이 link을 발견했다.

0

고맙습니다! reproducebable 예제를 생성하는 동안 오류를 발견했습니다. 제 경우에는 하나의 함수에서 그림 핸들 대신 그림 핸들을 사용하고 있었는데 그 이유는 이미지 클릭 콜백 이었기 때문이며 그 함수 내부에서 이미지가 다시 그려져 핸들이 더 이상 유효하지 않았기 때문입니다. 그림 핸들을 얻으려면 gcf을 사용하고 올바르게 작동합니다.