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


  1. 它们有什么区别?

  2. 在Qt中,如果我有QPushButton的热键,我可以通过"Alt + ?"来制作它,但如果是用于qaction,我只能按"?"。

在Windows中,快捷键是应用程序全局的;例如Alt+F4

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

从Microsoft:

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

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

总结一下:

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

的具体含义;有关此内容,请参阅Qt文档。

Alf的答案对于Windows的适用性是正确的。你提到的术语(热键/快捷方式/加速器)从纯粹的Qt角度听起来并不熟悉。

在Qt

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

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

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

这在文档中都有说明。还有另外两个修饰符(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 将是一个糟糕的选择,因为它通常被认为是打印命令。

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

在 Windows 中:

热键

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

捷径

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

访问密钥

单键热键哪个命令是激活可见的命令控制(需要 GUI 元素),带有标题/标签,并带有相应的热键字母下划线。

加速键

多键热键,该命令是激活命令控件(需要gui元素),而不管其可见性如何。

最新更新