失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > matlab figure函数_如何在Matlab中使用GUI做一个简易音乐播放器? ---- (六)控件

matlab figure函数_如何在Matlab中使用GUI做一个简易音乐播放器? ---- (六)控件

时间:2022-03-14 19:01:47

相关推荐

matlab figure函数_如何在Matlab中使用GUI做一个简易音乐播放器? ---- (六)控件

我纠结了两个星期是否要写这一章…最后决定还是要写一章收尾,来解释其中的控件间的数据传递问题。

在前五篇中,如果有童鞋跟上了我的思路或者做完了这样一个gui,会发现还有一个一直避开的遗留问题,就是将歌曲信息从播放键里读取后再在诸如volumeSlider(操控音量的滑动条)或Axes(展示波形)中使用这些歌曲信息时,使用GUIDE时,在很多时候数据是不能直接跨控件使用的;即会有控件间的数据传递问题。这这篇文章中我将介绍我主要用到的几种方法。

那么,

控件间的数据传递有哪些方法呢?

首先是最为简单粗暴通用的第一种,使用global函数,直接把多个控件要使用的变量做成全局变量;即在要使用这个变量的控件的回调函数的开头都写上‘global+空格+变量名’这个形式的代码,这个变量就完成了多个控件间的数据传递。我个人在这个项目中就将播放器主体audioplayer做成了全局变量。

优点:大概是看起来很方便,加上很方便编写吧(小项目中)缺点:用专业的话来说,就是“破坏了程序的封装性”;这种方法中变量的改变牵一发而动全身,小项目倒无所谓,大项目很容易弄出奇怪的bug...

接下来,我们就要根据所适合的不同情景而介绍不同的方法了;

首先当然是简单的情景;即我们做的gui只有一个figure时(关于figure的问题见下图:

一条简单的关系
root,可以理解为电脑屏幕figure,就是一个界面axes,就是一个坐标轴uicontrol,就是按钮、文本框等等控件uimenu和uicontextmenu分别是界面菜单和右键点击某对象时屏幕上弹出的菜单,但此项目中暂时没用到这些

回到正题上来,当只有一个figure时,可想而知一切的控件都从属于同一个figure,这也就是为什么这种情况的参数传递会简单一些的原因。这种情况下,有:

第二种方法,使用userdata传递数据,每一个控件的属性中都一定有且仅有一个userdata属性,可以使用它来存取不同的数据,我在本次项目中用它存取了歌曲名等信息;使用的时候就像这样:

%将数据a存在listbox控件中

优点:使用简单!思路理起来也不乱缺点:每个控件只有一个userdata属性...要传递的数据多且杂时,且用且珍惜吧

第三种方法,使用handles和guidata函数传递参数,使用方法如下:

%在控件中存数据aa = 1;handles.a = a;guidata(hObject,handles);%上面这两句必须连写!!!!!%画面转到需要a的另一个控件a = handles.a;%取出数据

优点:个人感觉不是很好用...就没使用缺点:大概是不好写吧

当有好几个figure时怎么办???

当gui中有多个figure时,由于上面讲过的结构原因,数据传递会麻烦那么一些,就是

第四种,使用application数据,我在本次项目中就是用这个函数进行歌曲波形信息的存取的。主要函数的使用方法如下:

%在figure2中存数据a,并在figure1中读取a = 1;setappdata(figure1,'a',a);%画面转到figure1中读取时a = getappdata(figure1,'a');

优点:泛用性高,多个figure一个figure都能用,数据多少都能用缺点:每调用一次所用的figure就要初始化一次,有点慢?改良:可以使用setappdata(0,'a',a);将a放入工作区做成全局变量,这样可以达到global的效果却不会有global的坏处。

后面这两种个人认为实用性不太高。。。列举如下:(当然也有可能是在别的项目中特殊情景而会选择后面这两种

第五种,用save和load直接存/读文件第六种,用gui本身的varargin、varargout传递数据

还有一个第七种,就是用.m文件本身的参数来传递,事实上我在本次项目中是使用了这个方法的,不过并非用来传递数据(当然传递数据也是可以的),

我在编写时,发现播放键、上一首、下一首和双击播放列表等多个操作中有大段重复的部分;处于精简代码的考虑,就另外编了一个.m文件并多次调用,大概能使代码看起来更精简,思路更清晰吧。

咳咳,对传递方法做一个总结吧:

使用global函数使用userdata属性使用handles和guidata函数使用application数据用save和load直接存/读文件用gui本身的varargin、varargout传递数据用.m文件本身的参数

参考:

参考的一篇文章

matlab figure函数_如何在Matlab中使用GUI做一个简易音乐播放器? ---- (六)控件间的数据传递...

如果觉得《matlab figure函数_如何在Matlab中使用GUI做一个简易音乐播放器? ---- (六)控件》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。