2017-04-12 91 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

詳細討論謝謝您的幫助。它現在似乎工作完美。 –