2017-04-12 24 views
2

MatlabでGUIを作成しています。私は4つのスライダー、4つの静的テキストとプロットの軸を使用しています。私はスライダーから値を保存することに問題がありました。Matlab GUIコンポーネントからデータを保存する

スライダをデフォルト値に設定しました。 1つのスライダを動かすと、すべてが想定通りにプロットされます。別のスライダーで移動すると、最初のスライダーからの値がデフォルトに復元され、2番目のセットからの値が想定通りに復元されます。

たとえば、サイクロイドの半径を定義するスライダを使用します。それから私は、スライダの値を設定する関数を呼び出し、結果をプロットする関数を呼び出します。

それは次のようになります。

% 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

問題は、handleクラスではなく、値クラス(MATLABのデフォルト)を使用していることです。値クラスでは、(コールバック内の)オブジェクトへの変更は、独立したコピーであるためオブジェクトの他のコピーには存在しません。そのため、コールバックは効果がないようです。 handleクラスを代わりに使用すると、割り当てによって同じオブジェクトに新しい参照が作成され、すべての参照で変更が維持されます。

classdef Cykloida < handle 

the MATLAB documentation

+1

のクラスの2種類の詳細な説明を参照してくださいあなたの助けをいただき、ありがとうございます。今は完璧に動作しているようです。 –

関連する問題