我正在寻找有关如何构建中型到大型MATLAB项目的资源,特别是那些涉及多个独立模块的项目.如何管理全局配置变量,如何将项目构建到文件夹中,如何管理模块之间的耦合等.
关于这个主题是否有某种标准文本?看起来大多数MATLAB教科书都是由科学家或工程师编写的.我想,我正在寻找的是由软件工程师编写的任何MATLAB教科书.:-)
我正在开发一个相当复杂的GUI程序,可以使用MATLAB Compiler进行部署.(有很好的理由使用MATLAB来构建这个GUI,这不是这个问题的重点.我意识到GUI构建不适合这种语言.)
有很多方法可以在GUI中的函数之间共享数据,甚至可以在应用程序中的GUI之间传递数据:
setappdata/getappdata/_____appdata - 将任意数据与句柄相关联guidata - 通常与GUIDE一起使用; "存储[s]或检索[s] GUI数据"到句柄结构set/get操作应用于UserData句柄对象的属性我的代码的结构不是最漂亮的.现在我将引擎与前端隔离开来(好!)但GUI代码很像意大利面条.这是一个"活动"的骨架,借用Android说话:
function myGui
fig = figure(...);
% h is a struct that contains handles to all the ui objects to be instantiated. My convention is to have the first field be the uicontrol type I'm instantiating. See draw_gui nested function
h = struct([]);
draw_gui;
set_callbacks; % Basically a bunch of set(h.(...), 'Callback', @(src, event) callback) calls would occur here
%% DRAW …Run Code Online (Sandbox Code Playgroud) 我一直试图在MATLAB中组合一个gui并且遇到了很大困难.以下是关于我的程序的一些背景知识:我想创建一个向导来引导用户完成图像分析过程.向导将提示用户输入,然后在按下标有"下一步"的按钮后执行图像处理操作,依此类推.从阅读MATLAB帮助我相信gui创建有两种方法:1.用代码行写一个gui.2.使用GUIDE.
我认为GUIDE会有最浅的学习曲线.起初这个过程是直截了当的.我可以拖放按钮和文本框并轻松排列.我的计划是安排一系列面板,按钮和文字等,按下"下一步"按钮后,按顺序显示.就在这里,我变得难过了.
一旦我使用GUIDE保存面板,MATLAB就会创建一个.m文件和一个.fig文件.通过.m文件读取,我发现它为我提供了编写回调代码的空间,但没有其他的东西..fig文件是二进制文件,因此我不敢编辑它.我想知道如何控制对象,例如如何设置面板的可见性?此外,我必须分别创建向导的每个面板.我希望我可以手动将.m文件合并到一个wizard.m包装文件中,但我不认为这是正确的方法(至少对我来说,因为我看不到怎么做).
代替使用GUIDE我已经看过使用"uicontrol"函数创建guis的示例.这种方法对我来说似乎很乏味,因为我必须手动编码每个按钮的位置和大小以及默认值.也许这是最好的方法,但它吓倒了我.
因此,我对MATLAB因其看似笨重的gui工具感到不满,而且我对自己因为缺乏克服这个障碍而感到不满.
我已经看到在MATLAB中创建了一些花哨的guis并且我自己尝试了这个并且缩短了我对它们的存在感到困惑.无论是谁制作它们都是特殊的MATLAB用户(我不是),或者我错过了一些明显的东西,并且可以使用一些帮助.我现在正在质疑gui是否值得付出努力.我不认为自己正在探索类似QT的东西,因为将MATLAB代码嵌入其他语言(如python)的额外挑战.
有没有人就这个问题提出建议?任何人都可以指出我哪里出错或为什么我有这样的困难?
我被要求使用Matlab和GUIDE开发一个简单的GUI应用程序,它将与一个单独的后端引擎(也是Matlab)进行交互.我来自Java和.Net背景.
Matlab文档强有力地说明了如何在技术上做到这一点,但对"工程"过程几乎没有说明,特别是:
如何打包/命名空间函数或创建库?
如何最好地在文件系统上放置文件?
如何实现典型的GUI模式,例如:MVC,观察者?
这些问题在Matlab开发中是否有意义?
还有其他常见的习语/陷阱吗?
直接建议或指向好的参考资料将非常有帮助.谢谢.
我需要在MATLAB中为我的项目创建一个GUI.我到处寻找如何编程GUI的例子,但我找不到很多东西.在MATLAB中有哪些优秀的GUI编程站点或技术?
我for在MATLAB的GUI的打开功能中有一个循环,我正在尝试使用回调按钮来打破循环.我是MATLAB的新手.这是我的代码:
%In the opening function of the GUI
handles.stop_now = 0;
for i=1:inf
if handles.stop_now==1
break;
end
end
% Executes on button press
function pushbutton_Callback(hObject, eventdata, handles)
% hObject handle to end_segmenting_button (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
handles.stop_now=1;
guidata(hObject, handles);
Run Code Online (Sandbox Code Playgroud)
出于某种原因,尽管使用句柄定义变量,但按下按钮时循环不会中断.有谁知道发生了什么?谢谢.
我搜索了互联网和堆栈溢出,但找不到解决方案,甚至找不到对我的问题有帮助的提示。
我需要在 MATLAB 中编写一个专门的视频注释软件,该软件必须能够在 GUI 上同时播放多个视频(至少 2 个)。视频文件采用 XVID 编码。到目前为止,我基本上只是调整了 mathworks.com 的视频播放示例(xylophon.avi,请参阅 movie() 描述)。
我熟悉 mmreader、VideoReader、movie 和 implay 功能,但仍然面临两个问题:
即使我只读入少量帧(如 xylophon.avi 示例),我的程序很快就会超出可用内存。而且,即使是相对较少的帧(比如 100),读取也需要相当长的时间。
movie() 函数是同步的,因此在第一个视频完成之前第二个视频不会开始。如何同时调用两个 movie() 函数?或者是否有另一种方法可以同时显示两个(或更多)视频?
有什么建议么?谢谢!
请我是一名学生,他正在开发一个可视化工具,用于在matlab中使用mvc设计来分析数据.但我遇到的问题是,我不熟悉编程和matlab是第一个真正的编程即时通讯.香港专业教育学院几乎完成了代码,但我担心他们没有办法在mvc设计模式,所以我需要改变这一点.
我真的很欣赏尽可能多的推论将我与有用的材料联系起来,因为我无法在matlab中找到任何mvc,或者可能是在matlab中实现mvc的示例代码,以帮助我了解我如何做我的,目前和做这样的事情,其中数据是一个带有.ad和.Data文件的结构.函数/方法datcorrCoef和datCorrSum是我创建的函数,它接受我的数据对象作为参数
function dataAnalysisGUI(data)
fdataAnalysisGUI = figure('Name','Data Analysis ',...
'tag','dataAnalysisGUI',...
'menu','none',...
'units','normalized',...
'NumberTitle', 'off')
%%% intialise the gui with data set to work with
vtDaUD.opD = data;
Rsq = datcorrCoef(vtDaUD.opD);
opit = datWrappa(Rsq);
vtDaUD.wd = opit;
vtDaUD.feel = datCorrSum(data);
%%%------------------- menus ------------------------------------------%%%
smh = uimenu('Label', 'Sort', 'Tag', 'daSortMenu');
cmh = uimenu(smh, 'Label', 'Sum of CorrCoeff ',...
'Tag', 'correlation');
uimenu(cmh, 'Label', 'Increasing ',...
'Tag', 'cIncreasing',...
'callback','vtDaCallbacks(''cIncreasing_callback'')');
uimenu(cmh, 'Label', 'Decreasing ',...
'Tag', 'cDecreasing',...
'callback','vtDaCallbacks(''cDecreasing_callback'')');
mmh = uimenu(smh, 'Label', 'Max Lag ',...
'Tag', …Run Code Online (Sandbox Code Playgroud)