在 MATLAB UIMenu 中使用 Enter 作为加速器
Posted
技术标签:
【中文标题】在 MATLAB UIMenu 中使用 Enter 作为加速器【英文标题】:Using Enter as Accelerator in MATLAB UIMenu 【发布时间】:2016-08-01 15:08:38 【问题描述】:我正在 MATLAB 中构建一个 GUI,目前使用 uimenu
添加自定义菜单。我正在尝试为不同的菜单操作添加不同的加速器。
我发现在uimenu
(见下文)matlab 中将char(10)
(换行符)作为加速器字符添加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
【问题讨论】:
你的回调错误已经解决了,但这在 OS X 上对我有用。你可以尝试在没有桌面的情况下运行 MATLAB 来确认你的怀疑吗?还有什么版本和操作系统? 版本:9.0.0.370719 (R2016a) 操作系统:Microsoft Windows 7 Enterprise Version 6.1(Build 7601:Service Pack 1)我会尝试无窗口运行并回来! 好吧,只要我在-nodesktop
模式下运行它,它也对我有用。我想这很好,因为它会在我完成后部署。有什么想法可以让它在桌面模式下工作吗?
我怀疑在桌面模式下没有一个好的方法可以做到这一点。应用程序似乎在非常低的级别劫持了该快捷方式。
好吧,太糟糕了。我对stackexchange还是很陌生,这里有什么正确的操作?删除我的帖子或回答我自己以供其他人看到?
【参考方案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
您也可以这样做,以便在部署您的应用时或使用-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
【讨论】:
以上是关于在 MATLAB UIMenu 中使用 Enter 作为加速器的主要内容,如果未能解决你的问题,请参考以下文章