1

我正在 MATLAB 中构建一个 GUI,目前使用uimenu. 我正在尝试为不同的菜单操作添加不同的加速器。

我发现在(见下文)matlabchar(10)中将(换行符)作为加速器字符添加为该菜单的加速器标签。问题是当我点击它时它不会运行回调。uimenuCtrl+ EnterCtrl+ 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
4

1 回答 1

1

正如您所说,主应用程序似乎已注册此加速器,因此阻止您的 GUI 拦截此调用。

您可以尝试在快捷方式首选项对话框中更改 MATLAB 的键盘快捷方式。请注意,这只会影响的 MATLAB 安装。

如果您在-nodesktop模式下启动 MATLAB,那么这将阻止 MATLAB IDE 启动 IDE,并且应该释放加速器供您使用。

matlab -nodesktop

由于您提到这将是一个已部署的应用程序,您始终可以使用isdeployed它来检查它是否作为已部署的应用程序运行,如果不是,那么您可以使用备用键盘快捷键,这样您就不必在没有IDE

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时使用回车键:

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
于 2016-08-01T15:09:48.330 回答