热键,快捷键和加速键之间有什么区别?

时间:2012-04-16 05:34:28

标签: c++ windows qt

  1. 他们有什么不同?

  2. 在Qt中,如果我有QPushButton的热键,我可以通过“Alt +?”来制作它,但是如果它是qaction,我可以按“?”仅

3 个答案:

答案 0 :(得分:22)

在Windows中,加速键是应用程序全局;例如替代 + F4

快捷键是菜单项或按钮名称的一部分,可以加下划线,并且当该菜单项或按钮可直接使用时可用(不带修饰符)。

来自Microsoft:

  

热键是用户可以按下以快速执行操作的组合键。例如,用户可以创建一个激活给定窗口的热键,并将其置于z顺序的顶部。

似乎表明热键是系统全局的。

总结一下:

  • 快捷键=无修饰符,菜单中的本地或窗口中的(用于按钮)
  • 加速键=通常使用修饰符,应用程序全局
  • 热键=显然系统全局

我不知道Qt中的具体含义;为此,请参阅Qt文档。

答案 1 :(得分:10)

Alf's answer对于Windows适用性是正确的。从纯Qt的角度来看,你提到的术语(热键/快捷键/加速器)听起来并不熟悉。

在Qt中,您可以选择自己处理键序列,也可以使用Qt自己的简化方法。无论哪种方式,你必须记住Qt本身针对许多平台,其中一个组合键可能有意义也可能没有意义。经典 Alt + F4 在键盘上有意义,但在移动设备上,您没有 Alt 修饰符或 F4 键。您真正想要的是一种指定通用关闭应用程序快捷方式的方法。此问题成倍增加,因为符号可用,但到达它的键序列可能在其他键盘布局上有所不同。 This section文档提供了一个很好的例子。

Qt使用class QKeySequence处理此问题。非常聪明的Qt开发人员提供了一种定义常见用户操作的简单方法,这些操作将使用默认为目标平台的组合键。它使用enum QKeySequence::StandardKey执行此操作,并在关闭应用程序示例中,您可以像这样使用它:

QAction exitAction;
exitAction.setShortcut(QKeySequence(QKeySequence::Quit));

documentation中对此进行了解释。还有另外两个修饰符(shortcutContext()softKeyRole())可以应用于QActions,以更高级的方式影响它们的应用。

您也可以使用以下内容自由指定自己的快捷方式:

QAction helpAction(tr("&?"));
helpAction.setShortcut(QKeySequence(tr("ALT+?")));

第一行应用(翻译)文本“?”在菜单或按钮上显示为其文本的操作。请注意,问号符号可能不是所有语言中的正确符号,因此翻译方法允许翻译者在需要时指定更合适的符号。 &符号表示当菜单处于活动状态时,紧随其后的字符将成为快捷键。

第二行指定 Alt + 的(已翻译)快捷方式,在此示例中, Shift 修饰符将由平台处理如果需要。同样,tr()方法允许翻译者指定更合适的快捷方式(如果可用)。


回应teukkam的评论:

如果你的意思是你只是希望你的按钮可以被击键触发,无论它是否被 Alt 修改,那么你可以做类似的事情:

QPushButton* yourButton; // assign this pointer yourself
yourButton->setText(tr("&Process"));
yourButton->setShortcut(tr("p"));

在此示例中,setText()中的&符号与上一示例相同,而translate函数的使用方式相同。

setShortcut()方法只使用字母“p”,因此现在可以使用或不使用 Alt 修饰符。快速浏览文档表明,无论是否使用 Shift 修饰符都可以使用,因为键序列中的字母显然不区分大小写。

此外,P将是一个糟糕的选择,因为它通常被认为是 print 命令。

最后一点,如果您要定义硬编码快捷方式,请确保它们适用于所有目标平台!

答案 2 :(得分:3)

在Windows中:

热键

在给定上下文中执行命令的键盘键或键组合

快捷方式

多键HotKey ,没有菜单导航限制,也不需要gui元素。

ACCESSKEY

单键HotKey 哪个命令用于激活可见命令控件  (需要gui元素)标题/标有相应的热键字母下划线。

加速键

多键HotKey 该命令用于激活命令控件(需要gui元素),无论其可见性如何。