3

MatlabのガイドでGUIを作っています。impoint でポイントを配置しており、「ポイント リスト」を更新できるように addNewPositionCallback を使用しています。update 関数にコールバックとして与える引数の 1 つは、'handles' オブジェクトです。しかし、Matlab はこれを値で渡すため、コールバックが呼び出されると、そこにハンドル オブジェクトがありますが、それは古いバージョンです。ハンドル オブジェクトへのポインタのようなものが欲しいです。

または、より一般的には、「ハンドル」オブジェクトをパラメーターとして持っていない関数のどこかにアクセスしたいと考えています。

編集:だから私は次のようなコールバック関数を持っています:

function updatePosition(pos, hObject, handles)

次のようなコールバックとして追加します。

addNewPositionCallback(testh,@(pos) updatePosition(pos, hObject, handles));

そして、ハンドルにポイントリストがありますhandles.pointlist. 5 つのポイントが含まれている必要がありますが、最初のポイントの updatePosition 呼び出しがあると、リストにはポイントが 1 つしか含まれていません。ハンドルは更新されていないようで、以前からのコピーがあるだけです。

4

2 に答える 2

3

JavaScript と同様に、matlab スクリプトは関数ハンドルとしてクロージャーを作成できます。つまり、変数を「キャプチャ」できるということです。ハンドル オブジェクトにアクセスできるコンテキストで updatePosition を作成できます。次のようにする必要があります。

H = handles.figure1; % get the figure handle
updatePosition = @(p) get(guihandles(H)... % the guihandles(H) contains the handles structure of the figure. Do whatever you need with it.

addNewPositionCallback(testh,updatePosition);
于 2012-11-09T18:11:35.627 に答える
0

GUIDE を使用して GUI を設計する場合、handles.output はハンドルをメイン インターフェイスに格納します。したがって、コールバックに次の行を追加すると:

handles=guidata(handles.output);

ハンドルを現在のバージョンに更新する必要があります。ここでこれらすべての詳細を取得できます: http://www.matlabtips.com/guide-me-in-the-guide/

于 2012-05-01T00:31:34.607 に答える