GUIDE迁移策略
在R2019b中,MathWorks®发布了GUIDE,这是MATLAB中构建应用程序的原始拖放环境®,将在未来的版本中删除。删除GUIDE后,现有的GUIDE应用程序(gui)将继续在MATLAB中运行,如果需要更改应用程序的行为,应用程序文件仍然是可编辑的。
若要继续编辑布局对于现有GUIDE应用程序,并帮助保持其与未来MATLAB版本的兼容性,您必须使用本表中列出的建议迁移策略之一。
应用开发需求 | 迁移策略 | 如何移民 |
---|---|---|
偶尔的编辑 | 将应用程序导出到单个MATLAB文件,以使用MATLAB函数管理应用程序布局和代码。 | 在GUIDE中打开应用程序并选择文件>导出到matlab文件.在“GUIDE移除选项”对话框中,单击出口. |
持续的发展 | 迁移你的应用到应用设计器。 | 在GUIDE中打开应用程序并选择文件>迁移到应用程序设计器.在“GUIDE移除选项”对话框中,单击迁移. |
导出指南应用程序到MATLAB文件
导出GUIDE应用程序将其转换为编程应用程序,方法是在单个MATLAB程序文件中重新创建GUIDE图和程序文件。
如果您计划:
对应用程序的布局或行为做一些小的改变。
以编程方式开发应用,而不是交互方式。
要导出应用程序,请在GUIDE中打开并选择文件>导出到matlab文件,或在MATLAB中右键单击FIG文件当前文件夹浏览并选择导出到matlab文件.这将弹出GUIDE remove Options对话框。确认选择了正确的图文件,然后单击出口.MATLAB创建一个程序文件_export
附加到文件名。新文件包含原始的回调代码和自动生成的处理应用程序的创建和布局的函数。这里显示了这些添加函数的示例。
迁移指南应用程序到应用程序设计器
迁移你的指南应用程序到应用程序设计器允许你继续开发你的应用程序的交互布局。它还允许你利用增强的UI组件集和自动回流选项等功能,使你的应用程序响应屏幕大小的变化。它让你能够创建和共享你的应用程序作为一个web应用程序(要求MATLAB编译器™).
的应用程序设计器迁移工具指南MATLAB在R2018a中首次发布,以简化转换过程。它可以通过MATLAB桌面中的Add-On资源管理器或通过文件交换MATLAB中央™.
从R2020a开始,迁移工具有了显著的改进,大大减少了在app Designer中运行应用程序所需的时间和手动代码更新的数量。有关这些增强功能的详细信息,请参见回调代码.
对于需要大量或正在进行功能开发的GUIDE应用程序,请使用此选项。
有几种迁移应用程序的方法,这取决于你开始使用的环境。
打开GUIDE remove Options对话框,在GUIDE中打开你的应用并选择文件>迁移到应用程序设计器,或在MATLAB中右键单击FIG文件当前文件夹浏览器和选择迁移到应用程序设计器.
如果您还没有安装应用程序设计器迁移工具指南,请单击安装支持包金宝app.这将打开Add-On资源管理器,您可以在其中安装迁移工具。一旦安装了该工具,重新打开GUIDE Removal Options对话框。
一旦你安装了应用程序设计器迁移工具指南,选择正确的图文件,然后单击迁移.应用程序会迁移并在应用程序设计器中自动打开。
在应用程序设计器中,打开任何应用程序,然后转到设计师选项卡。在文件部分中,点击开放>打开应用程序设计器迁移工具指南.
迁移工具的特性
迁移工具通过读入GUIDE FIG文件和自动生成App Designer等效组件和MLAPP文件布局来帮助您转换应用程序。GUIDE回调代码和其他用户定义函数被复制到MLAPP文件中。这种半自动化的代码转换还会创建一个迁移报告,为所需的任何手动代码更新建议操作。下表描述了该工具的一些特性。
迁移工具特性 | 描述 | |
---|---|---|
文件转换 | 读入GUIDE FIG文件和相关代码,然后生成App Designer MLAPP文件。应用程序设计器文件名采用该形式guideFileName _App.mlapp . |
|
组件和应用程序布局 | 将组件和属性配置转换为App Designer等价物,并保留应用程序的布局。 |
|
回调代码 | 在MLAPP文件中保留GUIDE回调代码和用户定义函数的副本。 | |
教程 | 逐步完成对迁移后的应用程序所做的更改。 | |
移民报告 | 总结由迁移工具成功完成的操作。列出任何限制或不支持的功能,具体到你的应用程序,并建金宝app议采取可行的措施。 |
回调代码
为了使你的guide风格的回调代码与应用程序中的App Designer UI组件兼容,迁移工具使用了一个名为convertToGUIDECallbackArguments
.这个函数将App Designer回调参数转换为你的代码所需的guide风格的回调参数。的convertToGUIDECallbackArguments
函数被添加到每个迁移回调函数的开头。它接受App Designer回调参数应用程序
而且事件
并返回guide样式的回调参数hObject
,eventdata
,处理
.例如:
每个guide风格的回调参数用于不同的目的:
hObject
正在执行其回调的对象的句柄。用于GUIDE应用程序中的组件UIControl
或ButtonGroup
对象,hObject
句柄是UIControlPropertiesConverter
或ButtonGroupPropertiesConverter
对象。创建这些对象是为了使你的guidestyle代码在App Designer回调函数中工作。eventdata
通常为空,但可以是包含关于回调事件的特定信息的结构。处理
是一个结构,其中包含UI图的迁移子组件,这些子组件具有“标签”
属性值集。子组件是UIControl
你的GUIDE应用程序中的对象是UIControlPropertiesConverter
类似地,childButtonGroup
对象是ButtonGroupPropertiesConverter
迁移的应用程序中的对象。
的UIControlPropertiesConverter
而且ButtonGroupPropertiesConverter
对象就像guide样式代码和App Designer组件和回调之间的适配器。一个UIControlPropertiesConverter
对象为GUIDE应用程序中的每个组件创建UIControl
对象。这些转换器对象与迁移后的应用程序中的App Designer UI组件相关联。转换器对象具有与原始转换器相同的属性和值UIControl
从你的GUIDE应用中,但它将它们应用到它相关的app Designer UI组件中。
同样的,对ButtonGroup
对象从GUIDE, aButtonGroupPropertiesConverter
对象在应用程序设计器中创建。对象可以设置SelectedObject
属性。UIControlPropertiesConverter
对象,以便按钮组SelectionChangedFcn
回调逻辑将起作用。
特殊注意事项
在某些情况下,你需要在迁移应用程序之前或之后采取额外的步骤。下表列出了需要额外步骤或手动代码更新的常见场景和编码模式。这并不是一个全面的列表。
GUIDE App功能 | 描述 | 建议的行动 |
---|---|---|
多窗口应用程序(即两个或多个共享数据的应用程序) | 多窗口应用程序要求每个应用程序分别迁移。迁移的应用程序文件名附加_App .从其他应用程序调用这些应用程序必须更新。 |
分别迁移每个应用程序。在调用应用程序中,将正在调用的应用程序的名称更新为新的文件名。 |
单选按钮和单选按钮回调 | 迁移工具不会将非父元素的单选按钮迁移到单选按钮组或单个单选按钮的回调函数。 |
在App Designer中创建一个按钮组并添加单选按钮。若要在单选按钮选择更改时执行行为,请创建SelectionChangedFcn 按钮组的回调函数。有关更多信息,请参见uiradiobutton 而且ButtonGroup属性. |
uistack |
不支持在应用程序设计器中调用此函数。金宝app | 在迁移之前确定该功能对应用程序是否至关重要。在应用程序设计器中没有变通方法。 |
findobj ,findall ,gcbo |
使用 |
引用组件时使用处理 结构,或者更新你的代码来使用相关的App Designer组件、属性和值。 |
输入参数个数 而且nargchk |
Helper函数被迁移到应用程序方法并具有应用程序 作为一个额外的输入参数。这会导致不正确的输入参数个数 或nargchk 逻辑。 |
将检查值递增为1 . |
OutputFcn (varargout) 而且数字 输出 |
在应用程序设计器中没有等效的功能。 实例化迁移的App Designer应用程序时,输出始终是App对象,而不是 |
如果你的 如果你的 函数out = MyGUIDEApp(varargin) app = MyMigratedApp(varargin{:});out = app.UIFigure;结束 |
如果你的GUIDE应用程序集成了第三方组件,使用类似的功能actxcontrol
,请参阅使用Java和ActiveX的MATLAB应用程序的推荐.
添加新功能或完全采用应用程序设计器代码风格的辅助
App Designer和GUIDE有不同的代码结构、回调语法和访问UI组件和共享数据的技术。如果你计划向迁移的应用程序添加新的App Designer功能,或者想要更新应用程序以使用App Designer代码风格和约定,了解这些差异是很有用的。下表总结了其中的一些差异。
区别 | 指南 | 程序设计师 | 更多的信息 |
---|---|---|---|
使用图形 | GUIDE调用 GUIDE调用 支持所有MATLAB图形函数。金宝app不需要指定目标轴。 |
应用程序设计器调用 应用程序设计器调用 支持大多数MATLAB图形函数。金宝app |
在应用程序设计器中显示图形 |
使用组件 | 方法创建大多数组件 |
App Designer使用自己的专用功能创建每个UI组件。还有更多组件可用,包括 |
应用程序构建组件 更新UIControl对象和回调 |
访问组件属性 | 指导使用 例如, |
App Designer支金宝app持 例如, |
应用程序设计器中的回调 |
管理应用程序代码 | 该代码被定义为可以调用局部函数的主函数。所有代码是可编辑的。 |
代码定义为MATLAB类。只有回调函数、助手函数和自定义属性是可编辑的。 |
在应用程序设计器代码视图中管理代码 |
编写回调 | 所需的回调输入参数为 例如, |
所需的回调输入参数为 例如, |
应用程序设计器中的回调 |
共享数据 | 要在回调函数和函数之间存储和共享数据,请使用 例如, |
若要在回调函数和函数之间存储和共享数据,请使用自定义属性创建变量。 |
在应用设计器应用中共享数据 |
如果你想要更新你迁移的应用程序中的回调代码以使用app Designer代码风格和约定,请遵循以下步骤:
类的引用
处理
结构来代替应用程序
对象。的处理
结构提供对表示的转换器对象的访问UIControl
对象,而应用程序
对象提供了对App Designer应用程序中的UI组件的访问。例如,guide样式的回调设置
写成BackgroundColor
按钮式的UIControl
对象使用此代码:handles.pushbutton1。写成BackgroundColor =“红色”;
更新这段代码,直接设置按钮UI组件的背景色:
app.pushbutton1。写成BackgroundColor=“红色”;
更新回调代码设置的属性。一般来说,
UIControl
对象及其等效的UI组件对象具有许多相同的属性。但是,属性名称或属性接受的值类型存在一些差异。来看看两者之间的比较UIControl
和UI组件对象和属性,以及了解如何更新代码以使用UI组件,请参见更新UIControl对象和回调.方法一旦回调函数不使用
hObject
,eventdata
,或处理
参数,删除由迁移工具添加的创建这些参数的代码行:[hObject,eventdata,handles] = convertToGUIDECallbackArguments(app,event);
如果您的应用程序创建对话框使用函数,如errordlg
或warndlg
,你也可以更新你的代码来利用专门为应用程序构建创建的现代对话框,比如uialert
而且uiconfirm
.有关更多信息,请参见更新对话框.