2014-07-18 54 views
0

我设计了一个GUIDE用于图像分析的MATLAB GUI。我需要在函数之间共享数据,所以我使用了guidata函数,并将其存储在句柄对象中,因为它有记录(http://www.mathworks.de/de/help/matlab/ref/guidata.html)。MATLAB GUI:交换数据(句柄)

对于自动生成的回调函数(自动接收句柄),这很好,但我也想修改自编写函数和自写回调函数(如点击图像事件)中的数据。我尝试手动传递句柄对象,它使我可以读取数据,但无法存储它。我也尝试过传递对象句柄,以便使用guidata(hObject, handles),但对象句柄不起作用。

总之:我需要一种方法来读取&从文件中的所有函数中写入数据。我正在寻找一种更优雅的方式,而不是把所有东西都变成全球。那将是我最后的手段。

你有什么想法吗?

+0

请提供一些复制问题的代码。目前还不清楚为什么通过'guidata'函数显式地或通过'guidata'函数传递'handles'结构不起作用。正如'guidata'的文档中所写的那样,只要你创建自己的字段(例如'handles.mydata')并且不覆盖GUIDE生成的字段,就不会遇到问题。 – excaza

+0

此外,'guidata(hObject,句柄)'是存储语法,而不是检索语法。 '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

非常感谢!我在尝试制作可重现示例时发现错误。在我的情况下,我在一个函数中使用了图像句柄,而不是图形句柄,因为它是一个图像点击回调函数,并且在该函数内部图像被重绘,因此句柄无效。 我现在使用gcf来获得图形句柄,它工作正常。