【问题标题】:Object-oriented Programming(OOP) associoate with GUIDE in MATLAB 2014a面向对象编程 (OOP) 与 MATLAB 2014a 中的 GUIDE 相关联
【发布时间】:2014-09-26 14:50:44
【问题描述】:

我一直在为 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中的每个组件(按钮,弹出菜单)都有很多错误,通常是这样的:

“char”类型的输入参数的未定义函数“AView”。

@(hObject,eventdata)AView('popupmenu1_CreateFcn',hObject,eventdata,guidata(hObject) 中的错误

使用 struct2handle 时出错

评估 uicontrol CreateFcn 时出错

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

提前致谢:)


更多cmets:我没有将GUIDE生成的文件复制到A类中。而是将GUIDE生成的文件放在名称为@A的文件夹中,与A.m相同。这样,GUIDE生成的函数就会被视为A类的方法

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

【问题讨论】:

  • 我不确定我是否理解,您是否将引导函数中的代码复制到您的课程中?
  • 不是,我创建了一个文件夹,名字是@A,把guide生成的文件放到这个文件夹里,这样GUIDE创建的函数就会被当作A类中的方法。参考: 在 mathwork 网站中搜索“单独文件中的方法”

标签: matlab oop user-interface matlab-guide


【解决方案1】:

创建面向对象风格的 MATLAB GUI 是非常有可能的。从您的方法的命名(例如View)来看,您似乎正在尝试 MVC(模型-视图-控制器)模式,这也是很有可能的。

但如果你这样做了,那么是真的放弃 GUIDE 的时候了。

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

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

【讨论】:

    【解决方案2】:

    您不能将 GUIDE 生成的代码复制到您的类文件中,除非您将 Aview 设为静态方法并将所有显示为 Aview 的回调替换为 A.Aview

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多