在 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 作为加速器的主要内容,如果未能解决你的问题,请参考以下文章

如何手动更改 UIMenu 中选定的 UIAction?

iOS开发之UIMenu

如何在 UIMenu 内的 UIAction 中更改图标颜色? [复制]

如何在 UIMenu 中制作不可点击的菜单项?

UIMenu 不弹出

单击 UIBarButtonItem 时显示 UIMenu