我在MATLAB中构建GUI并且当前使用uimenu
添加自定义菜单。我试图在不同的菜单操作中添加不同的加速器。
我发现将char(10)
(换行符)作为uimenu
中的加速器字符(见下文),matlab将Ctrl+ Enter
添加为该菜单的加速器标签。问题是,当我点击Ctrl+ Enter
时,它不会运行回调。
为什么这不起作用的任何想法?我错过了什么吗? Ctrl+ Enter
是否为"运行当前部分"取消我的电话?在那种情况下,我可以覆盖它吗?
MATLAB如何不接受Ctrl+ Enter
function test
close all
f=figure;
m=uimenu(f,'Label','test');
uimenu(m,'Label','a','callback',@hittest,'Accelerator','r');
uimenu(m,'Label','b','callback',@hittest,'Accelerator',char(10));
function hittest(h,~)
disp(h.Label)
end
end
答案 0 :(得分:1)
正如您所说,似乎主应用程序已注册此加速器,因此阻止您的GUI拦截此调用。
您可以尝试在shortcut preferences dialog中更改MATLAB的键盘快捷键。请注意,这只会影响 安装MATLAB。
如果以-nodesktop
模式启动MATLAB,那么这将阻止MATLAB IDE启动IDE并释放加速器供您使用。
matlab -nodesktop
由于您提到这将是已部署的应用程序,您可以始终使用isdeployed
检查它是否作为已部署的应用程序运行,如果不是,那么您可以使用备用键盘快捷方式所以你不必在没有IDE的情况下连续启动MATLAB
if ~isdeployed
% Use some other keyboard shortcut for testing
set(hmenu, 'Accelerator', <some other key for testing>)
else
% Use the enter key on deployed applications
set(hmenu, 'Accelerator', char(10))
end
您也可以这样设置,以便在部署或 matlab的任何时候使用-nodesktop
运行matlab,它将使用回车键:
if usejava('desktop')
% Use some other keyboard shortcut for testing
set(hmenu, 'Accelerator', <some other key for testing>)
else
% Use the enter key on deployed applications
set(hmenu, 'Accelerator', char(10))
end