如何在QMenu中为QActions指定助记符(&符号)?

时间:2012-02-02 09:33:15

标签: c++ qt user-interface qt4 mnemonics

我在QMenu中使用QActions,这是典型的

| &New file     Ctrl+N |
| &Open file    Ctrl+O |

当菜单打开时,它可以获得简单的N(对于新文件)和O(对于打开文件)的上下文快捷方式。

我想做一些类似的事情来列出最近的文件,即:

| [A recent file]          Ctrl+1  |
| [Another recent file]    Ctrl+2  |
 ... etc

将助记符/上下文快捷方式设置为相应的1和2,没有必须在文本字段中包含此数字会很好:

| &1. [A recent file]          Ctrl+1  |
| &2. [Another recent file]    Ctrl+2  |

如果有人知道如何做到这一点,或者可以指出我找到方向,我会很高兴。我已经查看了一些文档,我找不到使用&符号以及为QActions设置助记符快捷方式的等效方法。

感谢。

Ps:Qt-4.7.4-rh6-x86_64,C ++

2 个答案:

答案 0 :(得分:3)

您只能在菜单的上下文中创建shortcut有效:

QAction * recentFileAction = new QAction( tr("A recent file"), this );
recentFileAction->setShortcut( QKeySequence( tr("Ctrl+1") ) );

QMenu * tools = menuBar()->addMenu( tr("&Tools") );

// Add a shortcut valid only when the tools menu has focus
QShortcut * recentFileShortcut = new QShortcut( QKeySequence( tr("1") ), tools );
recentFileShortcut->setContext( Qt::WidgetShortcut );

connect( recentFileShortcut, SIGNAL(activated()),
         recentFileAction,   SLOT(trigger()));

您可能需要将菜单的焦点策略设置为Qt::StrongFocus,以便接受键盘输入。

答案 1 :(得分:1)

发表-说明:

  • 分别使用Qt-4.6.3-rh5-x86_64和Qt-4.6.4-win32测试并确认在linux / windows上工作。
  • 通过Kamil Klimek测试并报告无法在Mac OS X上运行。

我不完全确定这是否是Qt预期功能的一部分,或者只是一个黑客攻击。我找不到任何文件,暗示后者,但它很好地建议前者。你是法官,让我/我们知道。

通常的用法是:

// Existing: QMenu* fileMenu_
QAction* action = new QAction("Recent file name", fileMenu_)
action->setShortcut(QKeySequence(QString("CTRL+").append(QString::number(1))));
fileMenu_->addAction(action);

现在,显然,Qt将文件菜单填充为具有两列的表。默认行为是在左栏上有标签(名称),在右栏上有格式化的快捷键。

| Recent file name      Ctrl+1 |

可以使用转义标签轻松自定义。这样使用:

QAction* action = new QAction("Some text\tOther text", fileMenu_)
action->setShortcut(QKeySequence(QString("CTRL+").append(QString::number(1))));

结果

| Some text       Other text |

在失焦时仍然保留默认的Ctrl + 1快捷键。这导致了解决方案:

QAction* action = new QAction(QString("Recent file name\tCtrl+&%1").arg(i)), fileMenu_)
action->setShortcut(QKeySequence(QString("CTRL+").append(QString::number(i))));

变量i表示最近文件的索引。这创造了我的想法,并在数字下面显示了一个下划线,这很好地表明了助记符快捷方式。

<强>更新

为了证明最终结果,我添加了一些图片以防万一有混淆。

允许Qt使用快捷方式填充右列(我在提出问题之前所拥有的,非常标准):

手动填充右列后,还添加助记符:

除了表示助记符的下划线外,对我来说看起来相同。