CloseRequestFcnコールバックが実行されない
显示 更早的评论
・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
よろしくお願い致します。
采纳的回答
更多回答(0 个)
类别
在 帮助中心 和 File Exchange 中查找有关 MATLAB Support Package for IP Cameras 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!