我一直在为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
答案 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生成的代码留在自己的文件中。