面向对象编程(OOP)与MATLAB 2014a中的GUIDE相关联

时间:2014-09-26 14:50:44

标签: matlab oop user-interface matlab-guide

我一直在为Matlab中的计算程序开发GUI,该程序以面向对象的方式实现。因此,我正在考虑如何将GUIDE创建的GUI代码集成到类中以保持一致性。

首先,我搜索了Stackoverflow以找出类似的问题,然后我得到了一个Click

我尝试了该答案中提到的方法,但失败了。所以任何人都可以给我一些更多细节,建议会非常有用!

我的代码组织如下:

classdef A < handle

methods

  function obj = A(varargin)

    %some code
  end

  function Aplot(obj,varargin)
    %some code
    obj.fh = Aview(obj)
  end

  function varargout = Aview(varargin) 
     % this is the code generated by GUIDE in a seperate file

     % associated with AView_OpeningFcn(hObject, eventdata, handles, varargin)

     % and component(edit, popupmenu,etc) callback functions

  end

然后我在Windows中的每个组件(buttion,popupmenu)都遇到了很多错误,通常是这样的:

未定义的功能&#39; AView&#39;对于&#39; char&#39;。

类型的输入参数

@(hObject,eventdata)中的错误AView(&#39; popupmenu1_CreateFcn&#39;,hObject,eventdata,guidata(hObject)

使用struct2handle

时出错

评估uicontrol CreateFcn

时出错

如果我需要在对象A中需要一些数据结构,如何成功将类A的对象传递给GUI函数AView窗口?

提前致谢:)


更多评论:我没有将GUIDE生成的文件复制到A类中。但只需将GUIDE生成的文件放在名为@A的文件夹中,与A.m相同。这样,GUIDE生成的函数将被视为A类的方法

参考:搜索&#34;单独文件中的方法&#34;在http://www.mathworks.com/help/matlab/matlab_oop/specifying-methods-and-functions.html#brqy3km-15

2 个答案:

答案 0 :(得分:1)

以OO风格创建MATLAB GUI非常有可能。从方法的命名(例如View)开始,看起来您正在尝试MVC(模型 - 视图 - 控制器)模式,这也是非常可能的。

但是,如果您正在这样做,那么真的时间放弃GUIDE。

GUIDE生成的代码适用于非常快速和简单的GUI,但它的结构非常老式,违背了OO设计的许多原则(例如GUI组件的所有句柄)存储在实际上是一个很大的旧的全局变量中,需要传递并不断更新。只能将GUIDE生成的代码集成到OO应用程序中,而其结构和设计成本很高。

相反,请查看GUI Layout Toolbox。这是一个由MathWorks顾问撰写的免费工具箱(虽然不支持作为官方MathWorks产品)。它包括其他GUI技术的功能,如布局和调整大小,(非常全面)的文档包括一些如何以OO(MVC)模式实现MATLAB GUI的优秀示例。

答案 1 :(得分:0)

您无法将GUIDE生成的代码复制到您的类文件中,除非您使Aview成为静态方法并将Aview替换为A.Aview替换为{{1}}。

最简单的方法是将GUIDE生成的代码留在自己的文件中。