简单理解Matlab APP designer中两个APP或者多APP之间的数据传输方式

          Matlab APP designer可以同时设计好几个APP,并一定程度上可以互相交流数据。我看网上资料的时候,总觉得的讲的特别的不直观,我自己多方尝试后,多APP之间的简单数据传输方式,从整体方式上来看,我感觉特别像两个电脑的远程控制系统,如果你用过向日葵、或者QQ远程控制,就比较容易理解。首先以 远程控制软件,向日葵为例,先建立一个基础的认识:

         如果电脑1需要对电脑2进行数据传输或者远程操控,那么电脑1里面的向日葵1界面的设备列表里面就应该有电脑2的名字才行:

        那么在Matlab APP designer的APP中担任设备列表功能的就是:App输入参数

这个操作只需要在2个app中的任一个设置对方名字即可,只要有一个保存过名字,两个就可以交流

 接下来,介绍主要会用到的一些需求操作:

1、用App1打开App2,然后APP1关闭

    回调函数有两种写法:(这个操作主要是在设计登录界面的时候会需要)在一个app的代码视图中,其中的“app”标识都默认指代自己,所以代码中的delete(app)表示关闭app1自己。

  该按钮的回调函数如下:

(嘿嘿:写完第二部分,回来补充个了方法3)

            %方法1:不需要任何其他初始设置
            run app2;
            delete(app);
            
            %方法2:在app输入参数中写了app2名字后
            app2;
            delete(app);

            %方法3:在app输入参数中写了app2名字后,随便写个参数=app2
            flower2=app2;
            delete(app);

 这里你可能要问,用方法2打开App2以后,是不是可以直接delete(app2)关闭app2 ??

 答案是不能。

 这里就要介绍在数据交互中的另一个重要设置,就是各自在自己代码里设置一个称呼指代对方的代号;

2、数据或操作指令的传输-初始设置-取代号

     也就是说,虽然我们列表里有名字,打开app2,就像向日葵中选中列表后点击了 桌面控制或远程文件,然后电脑2的视图可以看到了,但是远程控制在电脑2上写东西时,用的鼠标键盘都是我电脑1的,我是不认识你电脑2的,所以此时的远程控制界面写了个代码,

“在该界面上,电脑2=电脑1”,

然后鼠标键盘就可以用了,但是都用电脑1这个名字,老得切换,干脆给电脑2另起一个代号,就叫 ”flower2“吧(程序就是flower2=电脑2),然后电脑1的代码里就可以用flower2在电脑2上操作了。

(注:以上是我的一个抽象联想,便于理解,当然不认同这种描述也可以)

     在官方文档里好像是叫设置侦听什么的,一般的操作就是在各自的代码视图中,选择 属性-私有属性,设置一个参数,比如flower2,使用方式有3种:

  1. 在后续代码中首次应用时,写上flower2=app2;
  2. 或者可以在该app的startupFcn回调中写上flower2=app2,这样app1打开时就执行了。
  3. 或者就在私有属性那里直接写,flower2=app2;

其中方式2和方式3都属于开机自启项,打开app1的时候,app2会直接弹出来。在方式1中,是点击操作后,才会执行。(以上这些其实也都是打开app2的方式,可以补充到第一部分里面去)

 (注1:这个并不是必须两个都要设置,如果你的需求是单向的,只想用app1控制app2,那就只在app1中设置就行了。

    注2:还有设置成私有属性参数,其实是为了当全局变量,如果你只在一个按钮里有控制操作,那不设置全局变量也可以。)

此时,app.flower2就在app1的代码里全程指代app2了

此时我们可以操作之前遗留的delete(app2)命令了,就是写成delete(app.flower2)

3、数据或操作指令的传输-具体操作

了解了第2部分,我们来实战演练一下:

 首先环境设置:

1、在app1的app输入参数中写上app2;

2、在app1的私有属性中写入参数 flower2;

操作1:黄色框框1-打开app2,并输入app2最喜欢的数

      首先现在下面的白色框里填一个数,比如7,然后设置按钮黄框1的回调函数:

            % 打开app2
            app.flower2=app2;      
            
            % app.flower2.EditField中的EditField是app2中那个白色框的名字
            % app.EditField.Value中EditField是app1里面的输入7的那个白色框的名字
            % 注意引用正确的名字
            app.flower2.EditField.Value=app.EditField.Value;

操作2: 黄色框框2-导入app2最喜欢的图

     首先找一张图,然后设置按钮黄框2的回调函数:

            %读取图片
            im=imread('apppicture.PNG');
            
            %在app2中显示图片
            imshow(im,'Parent',app.flower2.UIAxes);

 操作3:绿色框框1-app2最喜欢的数是?

按钮绿框1的回调函数:

            %从app2的数值框中读取,写入绿框1下面的数值框里
            app.EditField_2.Value=app.flower2.EditField.Value;

操作4:绿色框框2-app2最喜欢的图是?

按钮绿框2的回调函数:

            %从app2中复制图像
            copyobj(app.flower2.UIAxes.Children,app.UIAxes);

 这里我也不太清楚为什么复制回来的图是倒的,因为我用的版本是2018b,没有图像组件,只能用坐标区组件来导入图。但是如果是复制正常的数据绘制的坐标区图,结果是正常的。

可能还是升级成新版本更方便一些。

操作5:关闭app2

回调函数:

            delete(app.flower2)

4、其他的

关于有些教程中会用到公共函数、公共属性等传递数据,其实它们的用法和私有函数、私有属性是一样的,本质是为了做全局参数,并不完全是为了传递数据的,更多是为了方便计算的。可以根据自己的需求应用。

  • 7
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值