2017-04-12 93 views
2

我正在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:

https://pastebin.com/XqYYAxRP

综上所述:

我需要的是滑盖的值不会恢复到默认值,但将留在滑块移动之后。

回答

1

问题是你正在使用一个值类(MATLAB的默认值),而不是一个handle类。使用值类时,对象的任何修改(在您的回调中)都不会出现在对象的其他副本中,因为它们是独立的副本,因此您的回调似乎不起作用。当您使用handle类时,分配将为同一对象创建一个新的参考,并且更改将持续存在于所有参考中。

classdef Cykloida < handle 

看到两种类型的类的the MATLAB documentation

+1

详细讨论谢谢您的帮助。它现在似乎工作完美。 –