MATLAB GUI传递方式:
1、全局变量;
2、作为函数的参数传递;
3、利用控件的userdata数据;
4、为handles结构体添加新字段;
5、setappdata函数为句柄添加数据;
6、跨空间计算evalin和赋值assignin;
7、将数据保存到文件,需要时读取;
8、带参数调用GUI的M文件;
9、嵌套函数(不适用于GUIDE中,只适用纯命令式的GUI)。
一、全局变量
运动global定义全局变量传递参数,使用于GUI内控件以及不同GUI间。
使用过程中注意:在每一个要用到全局变量的地方,都要添一句global x类似的语句;而且,只要在一个地方修改了x的值,那么所有x的值就都变了。
全局变量破坏了程序的封装性。全局变量,能少用则少用。
案例:
一个界面上存在两个按钮,按钮1用来画sin(x),按钮2用来画cos(x)。
在GUI的OpeningFcn函数:
global x y1 y2
x=0:.1:2*pi;
y1=sin(x);
y2=cos(x);
在pushbutton1_Callback函数:
global x y1
plot(x,y1)
在pushbutton2_Callback函数:
global x y2
plot(x,y2)
二、运用GUI本身的varargin{}、varargout{}传递参数
该方式仅适用于GUI间传递数据,且只适用于主子结构,即从主GUI调用子GUI,然后关掉子GUI,不适用于递进结构,即一步一步实现的方式。
案例:
要求:① 双击主界面的选项,将该选项文本传递到次界面的可编辑文本框中显示出来,并隐藏主界面;② 单击次界面的返回按钮,隐藏次界面,显示主界面。
采用输入参数传递数据:可实现功能,但是具体的细节不太明白。
1)双击主界面,将选中的选项文本传给次界面。(主界面函数内更改)
function listbox1_Callback(hObject, eventdata, handles)
if isequal(get(gcf,'SelectionType'),'open') %鼠标双击
n=get(hObject,'value'); % 获取所选中选项的索引号
str_all=get(hObject,'string'); % 得到列表框中的所有文本
str=str_all(n); % 获得所选文本值
set(gcf,'Visible','off'); % 隐藏主界面
h=U3('strInfo',str);
set(h,'Visible','on');
end
2)将主界面得到的信息,显示在次界面的文本框内。(次界面函数内更改)
function U3_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
% OpeningFcn函数的输入参数个数为5时,varargin为1×2的单元数组---这是什么原因呢?
if (nargin==5)&&(strcmp(varargin{1},'strInfo'))
set(handles.edit1,'String',varargin{2});
end
guidata(hObject, handles);
3)将此界面隐藏,显示主界面。(次界面内修改)