我在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中:
总结:
我需要的是,滑块的值不会恢复为默认值,但会在使用滑块移动后保持不变。
答案 0 :(得分:1)
问题在于您使用的是值类(MATLAB的默认值)而不是handle
类。使用值类,对象的任何修改(在回调中)都不会出现在对象的其他副本中,因为它们是独立的副本,因此您的回调似乎没有任何效果。当您使用handle
类时,赋值将为同一对象创建一个新的引用,并且更改将在所有引用中保持不变。
classdef Cykloida < handle
中有关两类课程的详细讨论