【发布时间】:2016-10-21 11:48:10
【问题描述】:
我正在制作一个可以进行一些信号处理的 gui。其中一个组件是“录制”按钮,它可以从麦克风录制几秒钟的声音。几个滑块稍后会以不同的方式改变它的音高,然后有一个播放按钮来播放转换后的声音。
我使用句柄来获取有关从滑块中选择的频率的所有信息,它工作正常,但是对于录制的声音,我有点担心,因为我知道句柄结构一直被复制。几秒钟的声音可能不会太多,但我担心性能问题,因为 gui 运行了很长时间并且很多组件都被点击了。我在一些 Mathworks 页面上读到 guidata/handles 不应该用于大型数据结构,因为它会被复制。我尝试按照这里的说明使用 setappdata 和 getappdata https://se.mathworks.com/help/matlab/ref/getappdata.html
这里 https://se.mathworks.com/help/matlab/creating_guis/share-data-among-callbacks.html#bt9p4t0
但它不起作用,并给了我一个
Attempt to reference field of non-structure array.
Error in gui>recordbutton_Callback (line 334)
setappdata(hObject.Parent, 'v', 'Record')
错误。
这是我尝试存储它的方式:
% --- Executes just before gui is made visible.
function gui_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to gui (see VARARGIN)
setappdata(hObject, 'v', '');
%% --- Other app-specific inits
% --- Executes on button press in recordbutton.
function recordbutton_Callback(hObject, eventdata, handles)
% hObject handle to recordbutton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
setappdata(hObject.Parent, 'v', 'Record')
getappdata(hObject.Parent)
我尝试将它存储在 hObject.Parent 和 hObject 本身中。两者都给出相同的错误。我希望可以从所有其他组件的回调函数中访问数据,但不要一直复制。 请注意,在此示例中,我只是尝试将字符串 'Record' 存储在变量 v 中,而不是记录以便于阅读。
编辑:我正在使用指南。
【问题讨论】:
-
这是 MATLAB hObject.Parent,hObject不是结构体
-
是的,> 版本提供 8.3.0.532 (R2014a) 所以我猜是这样。我在 Stackoverflow 上看到了 hObject.Parent 的东西,所以我只是复制了它。任何解决方法?最终,代码应该在 2014a 和 2016 都运行,但这不是严格要求。
-
复制粘贴代码而不知道它做了什么!多么可怕可怕的想法。主要是因为你不知道如果失败会发生什么,而且 SO 中并非所有代码都是正确的。
-
我基本同意你的说法。然而,我只是假设 hObject.Parent 将是 hObject 的一个字段,它将访问将存储数据并可以从所有组件访问的底层图形。查看 Internet 上的示例并了解其工作原理是程序员的学习方式。在这种情况下,它并没有像我所怀疑的那样行事,我也承认这一点,但我没有发现任何问题。而且我没有复制粘贴。我写了一句话。复制粘贴你不理解的长段代码,当然。但是尝试您在 Stackoverflow 答案中读出的新关键字并没有那么错误 IMO。
-
谢谢。不确定。在互联网上你永远不知道。
标签: matlab matlab-guide data-storage