0

我正在使用 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。

4

1 回答 1

0

您体验到的行为是设计使然。Qt 仅使用标准快捷键以避免在使用不同键盘布局时可能发生的任何歧义。

Qt 文档中提供的示例总结了您的问题:

例如,快捷键 Ctrl plus 和 Ctrl minus 在图形应用程序中经常被用作缩放操作的快捷键,它们可以分别指定为“Ctrl++”和“Ctrl+-”。但是,指定和解释这些快捷键的方式取决于键盘布局。挪威语键盘的用户会注意到 + 和 - 键在键盘上并不相邻,但仍然能够激活这两个快捷键而无需按下 Shift 键。但是,使用英式键盘的用户需要按住 Shift 键才能输入 + 符号,从而使快捷键实际上与“Ctrl+Shift+=”相同。

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

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

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

于 2016-11-19T01:31:24.143 回答