他们有什么区别?
在 Qt 中,如果我有 QPushButton 的热键,我可以按“Alt + ?”,但如果是 qaction,我可以按“?” 只要
3 回答
在 Windows 中,加速键是应用程序全局的;例如Alt+ F4。
快捷键是菜单项或按钮名称的一部分,可以在其中添加下划线,并且在该菜单项或按钮直接可用时可用(不带修饰符)。
来自微软:
热键是用户可以按下以快速执行操作的组合键。例如,用户可以创建一个热键来激活给定窗口并将其带到 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()
) 可以应用于 QAction,它们以更高级的方式影响它们的应用。
您还可以使用以下方式自由分配自己的快捷方式:
QAction helpAction(tr("&?"));
helpAction.setShortcut(QKeySequence(tr("ALT+?")));
第一行应用(翻译的)文本“?” 到将作为其文本出现在菜单或按钮上的操作。请注意,问号符号可能不是所有语言中的正确符号,因此 translate 方法允许翻译者在需要时分配更合适的符号。& 符号表示菜单激活时紧随其后的字符将成为快捷键。
第二行指定Alt+的(翻译的)快捷方式,?在此示例中,Shift如果需要,平台将处理修饰符。同样,该tr()
方法允许翻译者指定更合适的快捷方式(如果可用)。
回应 teukkam 的评论:
如果您的意思是您只是希望您的按钮可以通过击键触发,无论它是否被修改,Alt那么您可以执行以下操作:
QPushButton* yourButton; // assign this pointer yourself
yourButton->setText(tr("&Process"));
yourButton->setShortcut(tr("p"));
在本例中,与号 insetText()
的作用与上例相同,translate 函数的使用方式相同。
该setShortcut()
方法仅使用字母“p”,因此现在可以使用或不使用Alt修饰符。快速浏览一下文档表明,无论有没有Shift修饰符,这都可以使用,因为键序列中的字母显然不区分大小写。
此外, P 将是一个糟糕的选择,因为它通常被认为是打印命令。
最后一点,如果您要定义硬编码的快捷方式,请确保它们适用于您的所有目标平台!
在 Windows 中:
热键
在给定上下文中执行命令的键盘键或键组合。
捷径
多键热键,没有菜单导航限制,也不需要 gui 元素。
访问密钥
单键 HotKey哪个命令用于激活可见的命令控件 (需要 gui 元素),该控件带有相应的热键字母加下划线的标题/标签。
加速键
多键 HotKey哪个命令用于激活命令控件(需要 gui 元素),无论其可见性如何。