存储来自Matlab GUI组件的数据

时间:2017-04-12 13:12:03

标签: matlab user-interface

我在Matlab中创建GUI。我使用4个滑块,4个静态文本和轴进行绘图。我遇到了存储滑块值的问题。

我将滑块设置为默认值。当我移动一个滑块时,一切都按照假设进行绘制。当我使用另一个滑块移动时,第一个滑块的值将恢复为默认值,第二个滑块的值将恢复为假设。

例如,我使用定义Cycloid半径的滑块。然后我调用为滑块设置值的函数,然后我调用绘制结果的函数。

看起来像这样:

% 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 个答案:

答案 0 :(得分:1)

问题在于您使用的是值类(MATLAB的默认值)而不是handle类。使用值类,对象的任何修改(在回调中)都不会出现在对象的其他副本中,因为它们是独立的副本,因此您的回调似乎没有任何效果。当您使用handle类时,赋值将为同一对象创建一个新的引用,并且更改将在所有引用中保持不变。

classdef Cykloida < handle

请参阅the MATLAB documentation

中有关两类课程的详细讨论