从Matlab GUI组件存储数据
问题描述:
我正在Matlab中创建GUI。我使用4个滑块,4个静态文本和坐标轴进行绘图。我遇到了存储滑块值的问题。从Matlab GUI组件存储数据
我将滑块设置为默认值。当我移动一个滑块时,所有事情都按照假设绘制。当我用另一个滑块移动时,第一个滑块的值恢复为默认值,并按照假设从第二个滑块恢复值。
例如,我使用定义摆线半径的滑块。然后我调用为滑块设置值的函数,然后我调用绘制结果的函数。
它看起来像这样:
% setting slider
slider(1)=uicontrol(container_1,'Style','slider','Min',0.1,'Max',10,'Value',1,'Tag','r');
% setting slider value
set(slider(:),'callback',{@obj.setValue});
% function to set value and store it as obj.r = value
function setValue(obj,handle,~)
obj.(handle.Tag)=handle.Value;
myPlot(obj);
end
这仅仅是从整个代码裁切片。整个代码是我pasterbin:
综上所述:
我需要的是滑盖的值不会恢复到默认值,但将留在滑块移动之后。
答
问题是你正在使用一个值类(MATLAB的默认值),而不是一个handle
类。使用值类时,对象的任何修改(在您的回调中)都不会出现在对象的其他副本中,因为它们是独立的副本,因此您的回调似乎不起作用。当您使用handle
类时,分配将为同一对象创建一个新的参考,并且更改将持续存在于所有参考中。
classdef Cykloida < handle
看到两种类型的类的the MATLAB documentation
详细讨论谢谢您的帮助。它现在似乎工作完美。 –