APPdesingnerを使用した場合のアプリ間の数値の引き渡しについて
Show older comments
Aというメインアプリにてfor文でループさせ、ある条件(if文)でTrueのときにBアプリを起動させfor文の値をBアプリに渡す方法を教えてください。
具体的には、Aアプリを実行した際に、下記のプログラムが流れて、Bアプリ(record)が立ち上がるように考えており、Bアプリにはfor文のidxの値を渡したいと考えております。
%カメラデータが保管してあるエクセルの読込
caminfo = readtable('camera_adress.xlsx');
caminfo = table2cell(caminfo);
%NWカメラobjectを作成するためにエクセルのカメラ情報を読取camに格納
for idx = 1:height(caminfo)
cam = ipcam(caminfo{idx,1},caminfo{idx,2},caminfo{idx,3});
eval(['cam',num2str(idx) '= cam'])
%もし、4列目の値が1であればrecordアプリを立ち上げて録画を開始。
if caminfo{idx,4} ==1
record%Bアプリ(record.mlapp)
end
end
Answers (1)
Kojiro Saito
on 24 Mar 2022
ドキュメント(マルチウィンドウ アプリでのデータ共有)が参考になると思います。
openExample('matlab/TopLevelMultiwindowAppExample','supportingFile','DialogAppExample');appdesigner('MainAppExample');
で2つのアプリ間のデータやり取りの例を確認できます。
メインアプリAのプロパティにアプリBのプロパティを入れておき、
properties (Access = private)
RecordApp % Record app
end
Bの(recordApp.mlapp)のコードオプションの入力引数に「idx」を入れておきます。recordだと既存の関数と名前が競合してしまうので、ここではrecordApp.mlappというファイル名にしています。
コードオプションの入力引数に「idx」を入れると、自動的にBのstartupFcnにidxが追加されるので、この値を使います。

メインアプリAから呼び出すときにAのidxの値をBに渡します。
if caminfo{idx,4} ==1
app.RecordApp = recordApp(idx);
end
また、Aを終了したときにBが終了するように、AのコールバックでUIFigureに対してCloseRequestFcn関数を設定します。

CloseRequestFcnの中では、Bのアプリのオブジェクト(app.RecordApp)をdeleteする行を追加します。
function UIFigureCloseRequest(app, event)
delete(app.RecordApp)
delete(app)
end
以上参考になれば幸いです。
1 Comment
naoya uwa
on 24 Mar 2022
Categories
Find more on MATLAB Support Package for IP Cameras in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!