QMenu中设置&符号快捷键的QAction未正常显示如何解决
问题描述
在QMenu中配置带&(与号)快捷键的动作项时,快捷键提示未正常渲染,预期效果和附带F11快捷键提示的「Help」动作项一致,即动作项旁正常展示对应的快捷键标识。
当前使用的实现代码:
QMenu* filesMenu = ui->menubar->addMenu("&Test"); QAction* ampersandAction = filesMenu->addAction("Ampersand!"); ampersandAction->setShortcut(Qt::Key_Ampersand);
运行上述代码后动作项旁未显示对应的&快捷键提示,需要调整代码实现预期效果。
原因分析
QAction::setShortcut()要求传入QKeySequence类型的快捷键序列,直接传入Qt::Key_Ampersand键枚举值无法被正确识别为完整快捷键配置。- Qt菜单默认的快捷键显示规则:仅在动作右侧常驻展示功能键(如F1~F12)、带修饰键(Ctrl/Alt/Shift等)的组合快捷键,单独的普通字符键默认不会显示常驻提示,避免和文本输入场景冲突。
修复方案
根据要实现的快捷键类型二选一即可:
- 实现无需打开菜单即可触发的全局快捷键,且在菜单右侧显示&标识
QMenu* filesMenu = ui->menubar->addMenu("&Test"); QAction* ampersandAction = filesMenu->addAction("Ampersand!"); // 显式构造QKeySequence对象传入,如果需要组合键可拼接修饰符,例:Qt::CTRL | Qt::Key_Ampersand 即为Ctrl+& ampersandAction->setShortcut(QKeySequence(Qt::Key_Ampersand)); // 强制开启上下文菜单中的快捷键提示显示,覆盖默认隐藏规则 ampersandAction->setShortcutVisibleInContextMenu(true);
- 实现菜单展开后按&快速触发的菜单加速键(效果为对应字符下显示下划线,和菜单名
&Test的Alt+T打开菜单逻辑一致)
这种场景不需要调用setShortcut,直接在动作文本的目标触发字符前加&即可:
QMenu* filesMenu = ui->menubar->addMenu("&Test"); // 菜单展开后按&键即可直接触发该动作,对应位置会自动显示下划线提示 QAction* ampersandAction = filesMenu->addAction("Ampers&and!");
内容的提问来源于stack exchange,提问作者Theo
相关产品推荐
相关产品推荐

