CloseRequestFcnコールバックが実行されない
Afficher commentaires plus anciens
・Figure上にWEBカメラ映像を表示
・終了ボタン、またはクローズボタン(ウインドウ右上の×ボタン)押下でアプリ終了
というアプリを作成したのですが、クローズボタン押下(CloseRequestFcn)が反応しません。
(my_closereq関数に処理が飛んできません)
「カメラ映像を表示するコード」をコメントアウトするとクローズボタン押下が反応してアプリが終了します。
実装方法で不適切な点などございますでしょうか?
※カメラ映像を表示する処理は
で頂いた回答を参考にしております。
% カメラハンドル取得
hCam = webcam(1);
% 実行画面GUIの作成と、不要なfigureデータの解放
figHandle = createWindow(hCam);
while true
pause(0.001);
% [終了]ボタン押下、またはクローズボタン押下時は即終了
if(isvalid(hPbExit) == 1 && getappdata(hPbExit, 'exitKeyPressed') == 1)
if(isvalid(hCam) == 1)
hCam.closePreview;
delete(hCam);
end
delete(figHandle);
return;
end
end
% [終了]ボタン押下時コールバック関数
function exitPressFcn(hObject, ~)
setappdata(hObject, 'exitKeyPressed', 1);
end
% Closeイベントハンドラ
function my_closereq(src,callbackdata)
global hPbExit;
setappdata(hPbExit, 'exitKeyPressed', 1);
end
% 実行画面作成関数
function figHandle = createWindow(hCam)
global hPbExit;
% ウインドウの生成
figHandle = figure('CloseRequestFcn', @my_closereq, 'Name', 'Tracker', 'tag', 'mainFigure', 'OuterPosition', [100, 100, 800, 800]);
clf(figHandle);
set(figHandle, 'Name', 'カメラ映像', 'NumberTitle', 'off')
set(figHandle, 'MenuBar', 'none');
% 以下の処理をコメントアウトすると、クローズボタンが効くようになる
%-----------------------------------------------
% カメラ映像を表示
if(isempty(hCam) == 0 && isvalid(hCam) == 1)
ax = axes('parent', figHandle);
yticks(ax, []);
xticks(ax, []);
frame = snapshot(hCam);
im = image(ax, zeros(size(frame), 'uint8'));
axis(ax, 'image');
preview(hCam, im);
end
%-----------------------------------------------
% 終了ボタンを配置
hPbExit = uicontrol(figHandle, 'Style', 'pushbutton', 'String', '終了', 'FontSize', 12,...
'Units', 'normalized', 'Position', [0.6 0.1 0.3 0.05], 'Callback', @exitPressFcn);
setappdata(hPbExit, 'exitKeyPressed', 0);
drawnow;
end
よろしくお願い致します。
Réponse acceptée
Plus de réponses (0)
Catégories
En savoir plus sur MATLAB Support Package for IP Cameras dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!