制作此快捷方式时我做错了什么?

时间:2016-11-18 16:32:47

标签: macos qt shortcut qaction qt5.7

我正在使用QT并且我有一个QAction,我想使用Cmd和Plus作为放大的快捷方式。我发现QKeySequence :: ZoomIn将映射到它,以及其他本机键组合放大其他类型的键盘。我已经使用下面的代码执行此操作,但是,这并不像我希望的那样正常工作。

QAction *zoomInAction = new QAction(QIcon("zoominimg.png"),"Zoom in", this);
zoomInAction->setShortcut(QKeySequence::ZoomIn);
connect(zoomInAction, SIGNAL(triggered()), this, SLOT(zoomIn())); 

当在外部键盘的小键盘上使用+键时,快捷键可以正常工作,但是,当你使用+键时你必须按shift然后=键才能使用,快捷键不再有效,并且zoomIn方法永远不会得到调用。

以前有没有人遇到过这个问题,知道如何解决这个问题?

如果有帮助的话,我在MacOS 10.12上使用Qt 5.7。

1 个答案:

答案 0 :(得分:0)

您遇到的行为是设计的。 Qt仅使用standard shortcuts以避免在使用不同键盘布局时可能出现的任何歧义。

Qt docs提供的

An example总结了您的问题:

  

例如,快捷键Ctrl +和Ctrl减号通常用作图形应用程序中缩放操作的快捷方式,这些快捷方式可以指定为" Ctrl ++"和" Ctrl + - "分别。但是,指定和解释这些快捷方式的方式取决于键盘布局。挪威键盘的用户会注意到+和 - 键在键盘上不相邻,但仍然可以激活这两个快捷键而无需按Shift键。但是,使用英国键盘的用户需要按住Shift键输入+符号,使快捷方式与" Ctrl + Shift + ="。

相同。      

虽然有些开发人员可能会完全指定他们在键盘上使用的所有修改器来激活快捷方式,但这也会导致不同键盘布局的用户出现意外行为。

     

例如,使用英式键盘的开发人员可能决定指定" Ctrl + Shift + ="作为键序列,以创建一个巧合的行为方式与Ctrl +相同的快捷方式。但是,需要使用挪威语键盘上的Shift键访问=键,从而有效地使用所需的快捷键Ctrl Shift Shift =(一个不可能的键组合)。

因此,如果您仍想使用涉及Shift修饰符的快捷方式,除了默认修饰符之外,您还必须自己编写代码。通过这样做,您应该记住,您的硬编码快捷方式可能无法在其他键盘布局上按预期工作。